From 35614f75613046276577c7906572d75169b2bf17 Mon Sep 17 00:00:00 2001 From: rozmansi Date: Sun, 19 Nov 2023 11:13:38 +0000 Subject: [PATCH] deploy: b824c204a6a8016f954865f5b6d002e603eba489 --- _unit_tests_2compat_8hpp_source.html | 2 +- annotated.html | 2 +- base64_8hpp_source.html | 2 +- chrono_8hpp_source.html | 2 +- classes.html | 2 +- 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 | 2 +- classstdex_1_1html_1_1comment.html | 2 +- ...sstdex_1_1html_1_1declaration-members.html | 2 +- classstdex_1_1html_1_1declaration.html | 2 +- classstdex_1_1html_1_1document-members.html | 2 +- classstdex_1_1html_1_1document.html | 2 +- classstdex_1_1html_1_1element-members.html | 2 +- classstdex_1_1html_1_1element.html | 2 +- ...stdex_1_1html_1_1element__end-members.html | 2 +- classstdex_1_1html_1_1element__end.html | 2 +- ...dex_1_1html_1_1element__start-members.html | 2 +- classstdex_1_1html_1_1element__start.html | 2 +- ...sstdex_1_1html_1_1instruction-members.html | 2 +- classstdex_1_1html_1_1instruction.html | 2 +- classstdex_1_1html_1_1parser-members.html | 2 +- classstdex_1_1html_1_1parser.html | 2 +- classstdex_1_1html_1_1sequence-members.html | 2 +- classstdex_1_1html_1_1sequence.html | 2 +- ...ex_1_1html_1_1starting__token-members.html | 2 +- classstdex_1_1html_1_1starting__token.html | 2 +- ...sstdex_1_1html_1_1text__token-members.html | 2 +- classstdex_1_1html_1_1text__token.html | 2 +- classstdex_1_1html_1_1token-members.html | 2 +- classstdex_1_1html_1_1token.html | 2 +- classstdex_1_1html_1_1url__token-members.html | 2 +- classstdex_1_1html_1_1url__token.html | 2 +- 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 | 2 +- classstdex_1_1parser_1_1basic__angle.html | 2 +- ...x_1_1parser_1_1basic__any__cu-members.html | 2 +- classstdex_1_1parser_1_1basic__any__cu.html | 2 +- ...stdex_1_1parser_1_1basic__bol-members.html | 2 +- classstdex_1_1parser_1_1basic__bol.html | 2 +- ...ex_1_1parser_1_1basic__branch-members.html | 2 +- classstdex_1_1parser_1_1basic__branch.html | 2 +- ...r_1_1basic__chemical__formula-members.html | 2 +- ...1_1parser_1_1basic__chemical__formula.html | 2 +- ...1_1basic__creditor__reference-members.html | 2 +- ...1parser_1_1basic__creditor__reference.html | 2 +- ..._1_1parser_1_1basic__css__cdc-members.html | 2 +- classstdex_1_1parser_1_1basic__css__cdc.html | 2 +- ..._1_1parser_1_1basic__css__cdo-members.html | 2 +- classstdex_1_1parser_1_1basic__css__cdo.html | 2 +- ...parser_1_1basic__css__comment-members.html | 2 +- ...tdex_1_1parser_1_1basic__css__comment.html | 2 +- ...1parser_1_1basic__css__import-members.html | 2 +- ...stdex_1_1parser_1_1basic__css__import.html | 2 +- ...1parser_1_1basic__css__string-members.html | 2 +- ...stdex_1_1parser_1_1basic__css__string.html | 2 +- ..._1_1parser_1_1basic__css__uri-members.html | 2 +- classstdex_1_1parser_1_1basic__css__uri.html | 2 +- ...sstdex_1_1parser_1_1basic__cu-members.html | 2 +- classstdex_1_1parser_1_1basic__cu.html | 2 +- ...x_1_1parser_1_1basic__cu__set-members.html | 2 +- classstdex_1_1parser_1_1basic__cu__set.html | 2 +- ...tdex_1_1parser_1_1basic__date-members.html | 2 +- classstdex_1_1parser_1_1basic__date.html | 2 +- ...r_1_1basic__dns__domain__char-members.html | 2 +- ...1_1parser_1_1basic__dns__domain__char.html | 2 +- ...1_1parser_1_1basic__dns__name-members.html | 2 +- classstdex_1_1parser_1_1basic__dns__name.html | 2 +- ...rser_1_1basic__email__address-members.html | 2 +- ...ex_1_1parser_1_1basic__email__address.html | 2 +- ..._1_1parser_1_1basic__emoticon-members.html | 2 +- classstdex_1_1parser_1_1basic__emoticon.html | 2 +- ...stdex_1_1parser_1_1basic__eol-members.html | 2 +- classstdex_1_1parser_1_1basic__eol.html | 2 +- ..._1_1parser_1_1basic__fraction-members.html | 2 +- classstdex_1_1parser_1_1basic__fraction.html | 2 +- ...__declaration__condition__end-members.html | 2 +- ...ic__html__declaration__condition__end.html | 2 +- ...declaration__condition__start-members.html | 2 +- ...__html__declaration__condition__start.html | 2 +- ...1parser_1_1basic__html__ident-members.html | 2 +- ...stdex_1_1parser_1_1basic__html__ident.html | 2 +- ...1_1parser_1_1basic__html__tag-members.html | 2 +- classstdex_1_1parser_1_1basic__html__tag.html | 2 +- ...1parser_1_1basic__html__value-members.html | 2 +- ...stdex_1_1parser_1_1basic__html__value.html | 2 +- ...tdex_1_1parser_1_1basic__iban-members.html | 2 +- classstdex_1_1parser_1_1basic__iban.html | 2 +- ...x_1_1parser_1_1basic__integer-members.html | 2 +- classstdex_1_1parser_1_1basic__integer.html | 2 +- ...1_1parser_1_1basic__integer10-members.html | 2 +- classstdex_1_1parser_1_1basic__integer10.html | 2 +- ...1parser_1_1basic__integer10ts-members.html | 2 +- ...stdex_1_1parser_1_1basic__integer10ts.html | 2 +- ...1_1parser_1_1basic__integer16-members.html | 2 +- classstdex_1_1parser_1_1basic__integer16.html | 2 +- ...arser_1_1basic__ipv4__address-members.html | 2 +- ...dex_1_1parser_1_1basic__ipv4__address.html | 2 +- ...arser_1_1basic__ipv6__address-members.html | 2 +- ...dex_1_1parser_1_1basic__ipv6__address.html | 2 +- ...1basic__ipv6__scope__id__char-members.html | 2 +- ...arser_1_1basic__ipv6__scope__id__char.html | 2 +- ..._1parser_1_1basic__iterations-members.html | 2 +- ...sstdex_1_1parser_1_1basic__iterations.html | 2 +- ...parser_1_1basic__json__string-members.html | 2 +- ...tdex_1_1parser_1_1basic__json__string.html | 2 +- ..._1parser_1_1basic__mime__type-members.html | 2 +- ...sstdex_1_1parser_1_1basic__mime__type.html | 2 +- ...rser_1_1basic__mixed__numeral-members.html | 2 +- ...ex_1_1parser_1_1basic__mixed__numeral.html | 2 +- ...r_1_1basic__monetary__numeral-members.html | 2 +- ...1_1parser_1_1basic__monetary__numeral.html | 2 +- ...tdex_1_1parser_1_1basic__noop-members.html | 2 +- classstdex_1_1parser_1_1basic__noop.html | 2 +- ...ex_1_1parser_1_1basic__parser-members.html | 2 +- classstdex_1_1parser_1_1basic__parser.html | 2 +- ...1parser_1_1basic__permutation-members.html | 2 +- ...stdex_1_1parser_1_1basic__permutation.html | 2 +- ...arser_1_1basic__phone__number-members.html | 2 +- ...dex_1_1parser_1_1basic__phone__number.html | 2 +- ...1_1parser_1_1basic__punct__cu-members.html | 2 +- classstdex_1_1parser_1_1basic__punct__cu.html | 2 +- ...rser_1_1basic__roman__numeral-members.html | 2 +- ...ex_1_1parser_1_1basic__roman__numeral.html | 2 +- ...1_1basic__scientific__numeral-members.html | 2 +- ...1parser_1_1basic__scientific__numeral.html | 2 +- ...dex_1_1parser_1_1basic__score-members.html | 2 +- classstdex_1_1parser_1_1basic__score.html | 2 +- ..._1_1parser_1_1basic__sequence-members.html | 2 +- classstdex_1_1parser_1_1basic__sequence.html | 2 +- ...stdex_1_1parser_1_1basic__set-members.html | 2 +- classstdex_1_1parser_1_1basic__set.html | 2 +- ...arser_1_1basic__si__reference-members.html | 2 +- ...dex_1_1parser_1_1basic__si__reference.html | 2 +- ...sic__si__reference__delimiter-members.html | 2 +- ...er_1_1basic__si__reference__delimiter.html | 2 +- ...1_1basic__si__reference__part-members.html | 2 +- ...1parser_1_1basic__si__reference__part.html | 2 +- ...ser_1_1basic__signed__numeral-members.html | 2 +- ...x_1_1parser_1_1basic__signed__numeral.html | 2 +- ...1_1parser_1_1basic__space__cu-members.html | 2 +- classstdex_1_1parser_1_1basic__space__cu.html | 2 +- ..._1basic__space__or__punct__cu-members.html | 2 +- ...parser_1_1basic__space__or__punct__cu.html | 2 +- ...ex_1_1parser_1_1basic__string-members.html | 2 +- classstdex_1_1parser_1_1basic__string.html | 2 +- ...rser_1_1basic__string__branch-members.html | 2 +- ...ex_1_1parser_1_1basic__string__branch.html | 2 +- ...tdex_1_1parser_1_1basic__time-members.html | 2 +- classstdex_1_1parser_1_1basic__time.html | 2 +- ...stdex_1_1parser_1_1basic__url-members.html | 2 +- classstdex_1_1parser_1_1basic__url.html | 2 +- ...1_1basic__url__password__char-members.html | 2 +- ...1parser_1_1basic__url__password__char.html | 2 +- ...1_1parser_1_1basic__url__path-members.html | 2 +- classstdex_1_1parser_1_1basic__url__path.html | 2 +- ...ser_1_1basic__url__path__char-members.html | 2 +- ...x_1_1parser_1_1basic__url__path__char.html | 2 +- ...1_1basic__url__username__char-members.html | 2 +- ...1parser_1_1basic__url__username__char.html | 2 +- ...tdex_1_1parser_1_1http__agent-members.html | 2 +- classstdex_1_1parser_1_1http__agent.html | 2 +- ..._1_1parser_1_1http__any__type-members.html | 2 +- classstdex_1_1parser_1_1http__any__type.html | 2 +- ...x_1_1parser_1_1http__asterisk-members.html | 2 +- classstdex_1_1parser_1_1http__asterisk.html | 2 +- ...dex_1_1parser_1_1http__cookie-members.html | 2 +- classstdex_1_1parser_1_1http__cookie.html | 2 +- ...er_1_1http__cookie__parameter-members.html | 2 +- ..._1_1parser_1_1http__cookie__parameter.html | 2 +- ...dex_1_1parser_1_1http__header-members.html | 2 +- classstdex_1_1parser_1_1http__header.html | 2 +- ...x_1_1parser_1_1http__language-members.html | 2 +- classstdex_1_1parser_1_1http__language.html | 2 +- ..._1parser_1_1http__line__break-members.html | 2 +- ...sstdex_1_1parser_1_1http__line__break.html | 2 +- ...1parser_1_1http__media__range-members.html | 2 +- ...stdex_1_1parser_1_1http__media__range.html | 2 +- ..._1parser_1_1http__media__type-members.html | 2 +- ...sstdex_1_1parser_1_1http__media__type.html | 2 +- ..._1_1parser_1_1http__parameter-members.html | 2 +- classstdex_1_1parser_1_1http__parameter.html | 2 +- ...x_1_1parser_1_1http__protocol-members.html | 2 +- classstdex_1_1parser_1_1http__protocol.html | 2 +- ...arser_1_1http__quoted__string-members.html | 2 +- ...dex_1_1parser_1_1http__quoted__string.html | 2 +- ...ex_1_1parser_1_1http__request-members.html | 2 +- classstdex_1_1parser_1_1http__request.html | 2 +- ...tdex_1_1parser_1_1http__space-members.html | 2 +- classstdex_1_1parser_1_1http__space.html | 2 +- ...1_1parser_1_1http__text__char-members.html | 2 +- classstdex_1_1parser_1_1http__text__char.html | 2 +- ...tdex_1_1parser_1_1http__token-members.html | 2 +- classstdex_1_1parser_1_1http__token.html | 2 +- ...sstdex_1_1parser_1_1http__url-members.html | 2 +- classstdex_1_1parser_1_1http__url.html | 2 +- ...arser_1_1http__url__parameter-members.html | 2 +- ...dex_1_1parser_1_1http__url__parameter.html | 2 +- ..._1_1parser_1_1http__url__path-members.html | 2 +- classstdex_1_1parser_1_1http__url__path.html | 2 +- ...r_1_1http__url__path__segment-members.html | 2 +- ...1_1parser_1_1http__url__path__segment.html | 2 +- ..._1_1parser_1_1http__url__port-members.html | 2 +- classstdex_1_1parser_1_1http__url__port.html | 2 +- ..._1parser_1_1http__url__server-members.html | 2 +- ...sstdex_1_1parser_1_1http__url__server.html | 2 +- ...tdex_1_1parser_1_1http__value-members.html | 2 +- classstdex_1_1parser_1_1http__value.html | 2 +- ...er_1_1http__value__collection-members.html | 2 +- ..._1_1parser_1_1http__value__collection.html | 2 +- ...dex_1_1parser_1_1http__weight-members.html | 2 +- classstdex_1_1parser_1_1http__weight.html | 2 +- ...rser_1_1http__weighted__value-members.html | 2 +- ...ex_1_1parser_1_1http__weighted__value.html | 2 +- ...1parser_1_1parser__collection-members.html | 2 +- ...stdex_1_1parser_1_1parser__collection.html | 2 +- ...ex_1_1parser_1_1sgml__any__cp-members.html | 2 +- classstdex_1_1parser_1_1sgml__any__cp.html | 2 +- classstdex_1_1parser_1_1sgml__cp-members.html | 2 +- classstdex_1_1parser_1_1sgml__cp.html | 2 +- ...ex_1_1parser_1_1sgml__cp__set-members.html | 2 +- classstdex_1_1parser_1_1sgml__cp__set.html | 2 +- ...er_1_1sgml__dns__domain__char-members.html | 2 +- ..._1_1parser_1_1sgml__dns__domain__char.html | 2 +- ..._1sgml__ipv6__scope__id__char-members.html | 2 +- ...parser_1_1sgml__ipv6__scope__id__char.html | 2 +- ..._1_1parser_1_1sgml__punct__cp-members.html | 2 +- classstdex_1_1parser_1_1sgml__punct__cp.html | 2 +- ..._1_1parser_1_1sgml__space__cp-members.html | 2 +- classstdex_1_1parser_1_1sgml__space__cp.html | 2 +- ...1_1sgml__space__or__punct__cp-members.html | 2 +- ...1parser_1_1sgml__space__or__punct__cp.html | 2 +- ...dex_1_1parser_1_1sgml__string-members.html | 2 +- classstdex_1_1parser_1_1sgml__string.html | 2 +- ..._1_1sgml__url__password__char-members.html | 2 +- ..._1parser_1_1sgml__url__password__char.html | 2 +- ...rser_1_1sgml__url__path__char-members.html | 2 +- ...ex_1_1parser_1_1sgml__url__path__char.html | 2 +- ..._1_1sgml__url__username__char-members.html | 2 +- ..._1parser_1_1sgml__url__username__char.html | 2 +- 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 | 2 +- endian_8hpp_source.html | 2 +- exception_8hpp_source.html | 2 +- files.html | 2 +- functions.html | 2 +- functions_b.html | 2 +- functions_c.html | 2 +- functions_d.html | 2 +- functions_e.html | 2 +- functions_f.html | 2 +- functions_func.html | 2 +- functions_func_b.html | 2 +- functions_func_c.html | 2 +- functions_func_d.html | 2 +- functions_func_e.html | 2 +- functions_func_f.html | 2 +- functions_func_g.html | 2 +- functions_func_h.html | 2 +- functions_func_i.html | 2 +- functions_func_l.html | 2 +- functions_func_m.html | 2 +- functions_func_n.html | 2 +- functions_func_o.html | 2 +- functions_func_p.html | 2 +- functions_func_q.html | 2 +- functions_func_r.html | 2 +- functions_func_s.html | 2 +- functions_func_t.html | 2 +- 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 | 2 +- functions_l.html | 2 +- functions_m.html | 2 +- functions_n.html | 2 +- functions_o.html | 2 +- functions_p.html | 2 +- functions_q.html | 2 +- functions_r.html | 2 +- functions_rela.html | 2 +- functions_s.html | 2 +- functions_t.html | 2 +- functions_type.html | 2 +- functions_u.html | 2 +- functions_v.html | 2 +- functions_vars.html | 2 +- functions_w.html | 2 +- functions_~.html | 2 +- hash_8cpp_source.html | 2 +- hash_8hpp_source.html | 2 +- hex_8hpp_source.html | 2 +- hierarchy.html | 2 +- html_8hpp_source.html | 16 +- idrec_8hpp_source.html | 2 +- include_2stdex_2compat_8hpp_source.html | 2 +- index.html | 2 +- interval_8hpp_source.html | 2 +- locale_8hpp_source.html | 2 +- mapping_8hpp_source.html | 2 +- math_8cpp_source.html | 2 +- math_8hpp_source.html | 2 +- memory_8hpp_source.html | 2 +- parser_8cpp_source.html | 6 +- parser_8hpp_source.html | 11622 ++++++++-------- pch_8hpp_source.html | 2 +- pool_8hpp_source.html | 2 +- progress_8hpp_source.html | 2 +- ring_8cpp_source.html | 2 +- ring_8hpp_source.html | 2 +- sgml_8cpp_source.html | 2 +- sgml_8hpp_source.html | 2 +- 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 | 2 +- string_8hpp_source.html | 2 +- ...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 | 2 +- structstdex_1_1html_1_1element__traits.html | 2 +- structstdex_1_1html_1_1entity-members.html | 2 +- structstdex_1_1html_1_1entity.html | 2 +- ...ex_1_1html_1_1inserted__token-members.html | 2 +- structstdex_1_1html_1_1inserted__token.html | 2 +- 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 | 2 +- structstdex_1_1parser_1_1html__attribute.html | 2 +- ...1parser_1_1http__factor__more-members.html | 2 +- ...stdex_1_1parser_1_1http__factor__more.html | 2 +- ...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 | 2 +- unicode_8hpp_source.html | 2 +- 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 +- 454 files changed, 6272 insertions(+), 6274 deletions(-) diff --git a/_unit_tests_2compat_8hpp_source.html b/_unit_tests_2compat_8hpp_source.html index 97416b2f3..b4234dc4c 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 22f408f97..7aee667b4 100644 --- a/annotated.html +++ b/annotated.html @@ -268,7 +268,7 @@ $(function() { diff --git a/base64_8hpp_source.html b/base64_8hpp_source.html index bcc0ec97d..fd092affe 100644 --- a/base64_8hpp_source.html +++ b/base64_8hpp_source.html @@ -541,7 +541,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/chrono_8hpp_source.html b/chrono_8hpp_source.html index 904a372d2..e4b8dd608 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 7f2ce6ca3..a2ec1e4cc 100644 --- a/classes.html +++ b/classes.html @@ -136,7 +136,7 @@ $(function() { diff --git a/classstdex_1_1base64__dec-members.html b/classstdex_1_1base64__dec-members.html index 4eb4c2881..9e12be8a4 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 db04f0b10..d650383d7 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 10fe49300..3b549ed19 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 9284e647a..b6ee6f791 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 d1272ace6..5972d0e23 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 c7efefa0e..f5e0553ff 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 cd7ec1a3f..a6f396273 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 b352c1bc7..294373d02 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 01bc1b5a1..96a4e352f 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 b908cc15f..2a3757b66 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 d49ea209e..e5159dad7 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 09ba138f9..a7a405894 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 bc3884e0c..63a5c8104 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 f070ed8a1..14c61ab3d 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 19015bbb6..fc669d3cb 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 52ae6d202..261b301b6 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 cfd510167..bdffc2c29 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 63b910d3f..00ffee3f0 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 c47c06f54..38cb5aa1f 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 b5678f51e..6ae510fde 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 4c27366f3..e696d41f6 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 f74bb17b3..bca6869a1 100644 --- a/classstdex_1_1hex__enc.html +++ b/classstdex_1_1hex__enc.html @@ -198,7 +198,7 @@ template<class _Elem , class _Traits , class _Ax > diff --git a/classstdex_1_1html_1_1comment-members.html b/classstdex_1_1html_1_1comment-members.html index 76321fa97..ad15e4578 100644 --- a/classstdex_1_1html_1_1comment-members.html +++ b/classstdex_1_1html_1_1comment-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1comment.html b/classstdex_1_1html_1_1comment.html index 797d715d8..81642cffb 100644 --- a/classstdex_1_1html_1_1comment.html +++ b/classstdex_1_1html_1_1comment.html @@ -135,7 +135,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1declaration-members.html b/classstdex_1_1html_1_1declaration-members.html index 89164051e..33eb114ee 100644 --- a/classstdex_1_1html_1_1declaration-members.html +++ b/classstdex_1_1html_1_1declaration-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1declaration.html b/classstdex_1_1html_1_1declaration.html index f9b3d34ca..a69115cde 100644 --- a/classstdex_1_1html_1_1declaration.html +++ b/classstdex_1_1html_1_1declaration.html @@ -139,7 +139,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1document-members.html b/classstdex_1_1html_1_1document-members.html index 42c519932..38cb8bc7b 100644 --- a/classstdex_1_1html_1_1document-members.html +++ b/classstdex_1_1html_1_1document-members.html @@ -107,7 +107,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1document.html b/classstdex_1_1html_1_1document.html index be3fef4f8..f089dbdc8 100644 --- a/classstdex_1_1html_1_1document.html +++ b/classstdex_1_1html_1_1document.html @@ -197,7 +197,7 @@ class stdex::html::document< _Elem, _Traits, _Alloc >

HTML documen

diff --git a/classstdex_1_1html_1_1element-members.html b/classstdex_1_1html_1_1element-members.html index 13c5a5abd..e478a8fb6 100644 --- a/classstdex_1_1html_1_1element-members.html +++ b/classstdex_1_1html_1_1element-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1element.html b/classstdex_1_1html_1_1element.html index 027b4e4de..559753e2e 100644 --- a/classstdex_1_1html_1_1element.html +++ b/classstdex_1_1html_1_1element.html @@ -152,7 +152,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1element__end-members.html b/classstdex_1_1html_1_1element__end-members.html index 2ddb604d4..d83059074 100644 --- a/classstdex_1_1html_1_1element__end-members.html +++ b/classstdex_1_1html_1_1element__end-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1element__end.html b/classstdex_1_1html_1_1element__end.html index 97c49f281..911019568 100644 --- a/classstdex_1_1html_1_1element__end.html +++ b/classstdex_1_1html_1_1element__end.html @@ -143,7 +143,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1element__start-members.html b/classstdex_1_1html_1_1element__start-members.html index fa61b6c9a..ee5b6a132 100644 --- a/classstdex_1_1html_1_1element__start-members.html +++ b/classstdex_1_1html_1_1element__start-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1element__start.html b/classstdex_1_1html_1_1element__start.html index e2f02f119..314454055 100644 --- a/classstdex_1_1html_1_1element__start.html +++ b/classstdex_1_1html_1_1element__start.html @@ -162,7 +162,7 @@ template<class T > diff --git a/classstdex_1_1html_1_1instruction-members.html b/classstdex_1_1html_1_1instruction-members.html index 0d1281744..5593a6eb1 100644 --- a/classstdex_1_1html_1_1instruction-members.html +++ b/classstdex_1_1html_1_1instruction-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1instruction.html b/classstdex_1_1html_1_1instruction.html index 3fda01b49..f865cc7c6 100644 --- a/classstdex_1_1html_1_1instruction.html +++ b/classstdex_1_1html_1_1instruction.html @@ -135,7 +135,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1parser-members.html b/classstdex_1_1html_1_1parser-members.html index 741ec666e..83024c41e 100644 --- a/classstdex_1_1html_1_1parser-members.html +++ b/classstdex_1_1html_1_1parser-members.html @@ -110,7 +110,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1parser.html b/classstdex_1_1html_1_1parser.html index 610419c32..caf68130b 100644 --- a/classstdex_1_1html_1_1parser.html +++ b/classstdex_1_1html_1_1parser.html @@ -618,7 +618,7 @@ template<class _Elem , class _Traits , class _Alloc > diff --git a/classstdex_1_1html_1_1sequence-members.html b/classstdex_1_1html_1_1sequence-members.html index 654894092..e1d71571e 100644 --- a/classstdex_1_1html_1_1sequence-members.html +++ b/classstdex_1_1html_1_1sequence-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1sequence.html b/classstdex_1_1html_1_1sequence.html index a888a391b..5c3ebd885 100644 --- a/classstdex_1_1html_1_1sequence.html +++ b/classstdex_1_1html_1_1sequence.html @@ -130,7 +130,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1starting__token-members.html b/classstdex_1_1html_1_1starting__token-members.html index f295ec8ba..7d74fa0f4 100644 --- a/classstdex_1_1html_1_1starting__token-members.html +++ b/classstdex_1_1html_1_1starting__token-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1starting__token.html b/classstdex_1_1html_1_1starting__token.html index 3e29da502..a36ead9c4 100644 --- a/classstdex_1_1html_1_1starting__token.html +++ b/classstdex_1_1html_1_1starting__token.html @@ -181,7 +181,7 @@ class stdex::html::starting_token< _Elem, _Traits, _Alloc >

Token

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

Token repr

diff --git a/classstdex_1_1html_1_1token-members.html b/classstdex_1_1html_1_1token-members.html index 31979bdcf..467bb68ab 100644 --- a/classstdex_1_1html_1_1token-members.html +++ b/classstdex_1_1html_1_1token-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1token.html b/classstdex_1_1html_1_1token.html index 92321c716..9c1c4d4f3 100644 --- a/classstdex_1_1html_1_1token.html +++ b/classstdex_1_1html_1_1token.html @@ -231,7 +231,7 @@ template<class _Traits = std::char_traits<wchar_t>, class _Alloc = st diff --git a/classstdex_1_1html_1_1url__token-members.html b/classstdex_1_1html_1_1url__token-members.html index 75b74f5ff..18fca5727 100644 --- a/classstdex_1_1html_1_1url__token-members.html +++ b/classstdex_1_1html_1_1url__token-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1url__token.html b/classstdex_1_1html_1_1url__token.html index 4c1451407..a7b622c49 100644 --- a/classstdex_1_1html_1_1url__token.html +++ b/classstdex_1_1html_1_1url__token.html @@ -163,7 +163,7 @@ class stdex::html::url_token< _Elem, _Traits, _Alloc >

HTTP token

diff --git a/classstdex_1_1idrec_1_1record-members.html b/classstdex_1_1idrec_1_1record-members.html index 8984df42a..d0d68cb70 100644 --- a/classstdex_1_1idrec_1_1record-members.html +++ b/classstdex_1_1idrec_1_1record-members.html @@ -100,7 +100,7 @@ $(function() { diff --git a/classstdex_1_1idrec_1_1record.html b/classstdex_1_1idrec_1_1record.html index da5e192a9..1949af2bd 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 ccbbc6265..2b1f45b7b 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 f99c7d43e..77fa96cab 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 03c668d08..6f60fba76 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 4758b0547..f447379b9 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 026465ede..21120b397 100644 --- a/classstdex_1_1parser_1_1basic__angle-members.html +++ b/classstdex_1_1parser_1_1basic__angle-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__angle.html b/classstdex_1_1parser_1_1basic__angle.html index 516772c44..f31873e5b 100644 --- a/classstdex_1_1parser_1_1basic__angle.html +++ b/classstdex_1_1parser_1_1basic__angle.html @@ -244,7 +244,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__any__cu-members.html b/classstdex_1_1parser_1_1basic__any__cu-members.html index 03eadda89..63fe81735 100644 --- a/classstdex_1_1parser_1_1basic__any__cu-members.html +++ b/classstdex_1_1parser_1_1basic__any__cu-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__any__cu.html b/classstdex_1_1parser_1_1basic__any__cu.html index e3d00a3ba..faf680ac9 100644 --- a/classstdex_1_1parser_1_1basic__any__cu.html +++ b/classstdex_1_1parser_1_1basic__any__cu.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__bol-members.html b/classstdex_1_1parser_1_1basic__bol-members.html index be71fa5a5..ce087b7a0 100644 --- a/classstdex_1_1parser_1_1basic__bol-members.html +++ b/classstdex_1_1parser_1_1basic__bol-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__bol.html b/classstdex_1_1parser_1_1basic__bol.html index 018bf9e24..b912eb2f9 100644 --- a/classstdex_1_1parser_1_1basic__bol.html +++ b/classstdex_1_1parser_1_1basic__bol.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__branch-members.html b/classstdex_1_1parser_1_1basic__branch-members.html index 61ad980f0..703e8efa1 100644 --- a/classstdex_1_1parser_1_1basic__branch-members.html +++ b/classstdex_1_1parser_1_1basic__branch-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__branch.html b/classstdex_1_1parser_1_1basic__branch.html index 60494f618..d97a6c937 100644 --- a/classstdex_1_1parser_1_1basic__branch.html +++ b/classstdex_1_1parser_1_1basic__branch.html @@ -253,7 +253,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__chemical__formula-members.html b/classstdex_1_1parser_1_1basic__chemical__formula-members.html index 86f7513ba..6d51087a1 100644 --- a/classstdex_1_1parser_1_1basic__chemical__formula-members.html +++ b/classstdex_1_1parser_1_1basic__chemical__formula-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__chemical__formula.html b/classstdex_1_1parser_1_1basic__chemical__formula.html index 7e588a053..b7dd38b3a 100644 --- a/classstdex_1_1parser_1_1basic__chemical__formula.html +++ b/classstdex_1_1parser_1_1basic__chemical__formula.html @@ -239,7 +239,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__creditor__reference-members.html b/classstdex_1_1parser_1_1basic__creditor__reference-members.html index c96ca90f6..382e1e0d4 100644 --- a/classstdex_1_1parser_1_1basic__creditor__reference-members.html +++ b/classstdex_1_1parser_1_1basic__creditor__reference-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__creditor__reference.html b/classstdex_1_1parser_1_1basic__creditor__reference.html index 32023fb91..2d03bdc9e 100644 --- a/classstdex_1_1parser_1_1basic__creditor__reference.html +++ b/classstdex_1_1parser_1_1basic__creditor__reference.html @@ -240,7 +240,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__cdc-members.html b/classstdex_1_1parser_1_1basic__css__cdc-members.html index 9979a0908..abcaf5e83 100644 --- a/classstdex_1_1parser_1_1basic__css__cdc-members.html +++ b/classstdex_1_1parser_1_1basic__css__cdc-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__cdc.html b/classstdex_1_1parser_1_1basic__css__cdc.html index d5a1586fa..ad086b832 100644 --- a/classstdex_1_1parser_1_1basic__css__cdc.html +++ b/classstdex_1_1parser_1_1basic__css__cdc.html @@ -139,7 +139,7 @@ class stdex::parser::basic_css_cdc< T >

Legacy CSS comment end

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

Legacy CSS comment start <

diff --git a/classstdex_1_1parser_1_1basic__css__comment-members.html b/classstdex_1_1parser_1_1basic__css__comment-members.html index 1fb310a5d..b239b49b3 100644 --- a/classstdex_1_1parser_1_1basic__css__comment-members.html +++ b/classstdex_1_1parser_1_1basic__css__comment-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__comment.html b/classstdex_1_1parser_1_1basic__css__comment.html index 0626ca478..36d45867e 100644 --- a/classstdex_1_1parser_1_1basic__css__comment.html +++ b/classstdex_1_1parser_1_1basic__css__comment.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__import-members.html b/classstdex_1_1parser_1_1basic__css__import-members.html index 153d4cbaf..cb957201b 100644 --- a/classstdex_1_1parser_1_1basic__css__import-members.html +++ b/classstdex_1_1parser_1_1basic__css__import-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__import.html b/classstdex_1_1parser_1_1basic__css__import.html index 7c0b1287e..6f9d5294e 100644 --- a/classstdex_1_1parser_1_1basic__css__import.html +++ b/classstdex_1_1parser_1_1basic__css__import.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__string-members.html b/classstdex_1_1parser_1_1basic__css__string-members.html index 2cfa49f3c..53acac88a 100644 --- a/classstdex_1_1parser_1_1basic__css__string-members.html +++ b/classstdex_1_1parser_1_1basic__css__string-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__string.html b/classstdex_1_1parser_1_1basic__css__string.html index e3f6b3e56..09c643bf5 100644 --- a/classstdex_1_1parser_1_1basic__css__string.html +++ b/classstdex_1_1parser_1_1basic__css__string.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__uri-members.html b/classstdex_1_1parser_1_1basic__css__uri-members.html index 52c3f4a58..f29305ba1 100644 --- a/classstdex_1_1parser_1_1basic__css__uri-members.html +++ b/classstdex_1_1parser_1_1basic__css__uri-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__uri.html b/classstdex_1_1parser_1_1basic__css__uri.html index cc439c216..98a9c5a8e 100644 --- a/classstdex_1_1parser_1_1basic__css__uri.html +++ b/classstdex_1_1parser_1_1basic__css__uri.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__cu-members.html b/classstdex_1_1parser_1_1basic__cu-members.html index 4e7d8c3d1..714cd6de5 100644 --- a/classstdex_1_1parser_1_1basic__cu-members.html +++ b/classstdex_1_1parser_1_1basic__cu-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__cu.html b/classstdex_1_1parser_1_1basic__cu.html index aeeaef2ad..c6411ce1c 100644 --- a/classstdex_1_1parser_1_1basic__cu.html +++ b/classstdex_1_1parser_1_1basic__cu.html @@ -201,7 +201,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__cu__set-members.html b/classstdex_1_1parser_1_1basic__cu__set-members.html index 6e47ab2a0..21f25c72b 100644 --- a/classstdex_1_1parser_1_1basic__cu__set-members.html +++ b/classstdex_1_1parser_1_1basic__cu__set-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__cu__set.html b/classstdex_1_1parser_1_1basic__cu__set.html index a506a0569..52f7355d1 100644 --- a/classstdex_1_1parser_1_1basic__cu__set.html +++ b/classstdex_1_1parser_1_1basic__cu__set.html @@ -210,7 +210,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__date-members.html b/classstdex_1_1parser_1_1basic__date-members.html index bb55ab14b..724445d6f 100644 --- a/classstdex_1_1parser_1_1basic__date-members.html +++ b/classstdex_1_1parser_1_1basic__date-members.html @@ -100,7 +100,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__date.html b/classstdex_1_1parser_1_1basic__date.html index dc7e324ac..c122e2003 100644 --- a/classstdex_1_1parser_1_1basic__date.html +++ b/classstdex_1_1parser_1_1basic__date.html @@ -252,7 +252,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__dns__domain__char-members.html b/classstdex_1_1parser_1_1basic__dns__domain__char-members.html index 4637668d6..8dc303cc8 100644 --- a/classstdex_1_1parser_1_1basic__dns__domain__char-members.html +++ b/classstdex_1_1parser_1_1basic__dns__domain__char-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__dns__domain__char.html b/classstdex_1_1parser_1_1basic__dns__domain__char.html index f5c2a6b13..daf763deb 100644 --- a/classstdex_1_1parser_1_1basic__dns__domain__char.html +++ b/classstdex_1_1parser_1_1basic__dns__domain__char.html @@ -203,7 +203,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__dns__name-members.html b/classstdex_1_1parser_1_1basic__dns__name-members.html index 6b0629860..62c08be8a 100644 --- a/classstdex_1_1parser_1_1basic__dns__name-members.html +++ b/classstdex_1_1parser_1_1basic__dns__name-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__dns__name.html b/classstdex_1_1parser_1_1basic__dns__name.html index b33b05920..fe87cf3c1 100644 --- a/classstdex_1_1parser_1_1basic__dns__name.html +++ b/classstdex_1_1parser_1_1basic__dns__name.html @@ -205,7 +205,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__email__address-members.html b/classstdex_1_1parser_1_1basic__email__address-members.html index 2541fbc18..074724c67 100644 --- a/classstdex_1_1parser_1_1basic__email__address-members.html +++ b/classstdex_1_1parser_1_1basic__email__address-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__email__address.html b/classstdex_1_1parser_1_1basic__email__address.html index 12cf36bc9..4e8d5cd02 100644 --- a/classstdex_1_1parser_1_1basic__email__address.html +++ b/classstdex_1_1parser_1_1basic__email__address.html @@ -245,7 +245,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__emoticon-members.html b/classstdex_1_1parser_1_1basic__emoticon-members.html index 98f8220d9..13918da69 100644 --- a/classstdex_1_1parser_1_1basic__emoticon-members.html +++ b/classstdex_1_1parser_1_1basic__emoticon-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__emoticon.html b/classstdex_1_1parser_1_1basic__emoticon.html index bc5ca2f57..4f684b1ca 100644 --- a/classstdex_1_1parser_1_1basic__emoticon.html +++ b/classstdex_1_1parser_1_1basic__emoticon.html @@ -243,7 +243,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__eol-members.html b/classstdex_1_1parser_1_1basic__eol-members.html index d5f76d5aa..ef4e052a4 100644 --- a/classstdex_1_1parser_1_1basic__eol-members.html +++ b/classstdex_1_1parser_1_1basic__eol-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__eol.html b/classstdex_1_1parser_1_1basic__eol.html index 98ecdddac..fb297195c 100644 --- a/classstdex_1_1parser_1_1basic__eol.html +++ b/classstdex_1_1parser_1_1basic__eol.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__fraction-members.html b/classstdex_1_1parser_1_1basic__fraction-members.html index 93c30896d..0918f11b2 100644 --- a/classstdex_1_1parser_1_1basic__fraction-members.html +++ b/classstdex_1_1parser_1_1basic__fraction-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__fraction.html b/classstdex_1_1parser_1_1basic__fraction.html index 544a7e8b1..024842448 100644 --- a/classstdex_1_1parser_1_1basic__fraction.html +++ b/classstdex_1_1parser_1_1basic__fraction.html @@ -232,7 +232,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html index 12f9f2bd8..dad2e1a28 100644 --- a/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html index 7116f0c6e..3148051c0 100644 --- a/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html @@ -139,7 +139,7 @@ class stdex::parser::basic_html_declaration_condition_end< T >

End

diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html index ab671f958..06e0e5870 100644 --- a/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html index 4f77c6fbd..1df5d21e6 100644 --- a/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html @@ -175,7 +175,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__html__ident-members.html b/classstdex_1_1parser_1_1basic__html__ident-members.html index 2a95cc694..2927bbc64 100644 --- a/classstdex_1_1parser_1_1basic__html__ident-members.html +++ b/classstdex_1_1parser_1_1basic__html__ident-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__ident.html b/classstdex_1_1parser_1_1basic__html__ident.html index 0e68597e0..61c0d4c6c 100644 --- a/classstdex_1_1parser_1_1basic__html__ident.html +++ b/classstdex_1_1parser_1_1basic__html__ident.html @@ -139,7 +139,7 @@ class stdex::parser::basic_html_ident< T >

Contiguous sequence of

diff --git a/classstdex_1_1parser_1_1basic__html__tag-members.html b/classstdex_1_1parser_1_1basic__html__tag-members.html index 13d9ccaf3..26067b3a6 100644 --- a/classstdex_1_1parser_1_1basic__html__tag-members.html +++ b/classstdex_1_1parser_1_1basic__html__tag-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__tag.html b/classstdex_1_1parser_1_1basic__html__tag.html index 5de40386d..002ebfc13 100644 --- a/classstdex_1_1parser_1_1basic__html__tag.html +++ b/classstdex_1_1parser_1_1basic__html__tag.html @@ -194,7 +194,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__html__value-members.html b/classstdex_1_1parser_1_1basic__html__value-members.html index 4bc7dc576..4fa1357e3 100644 --- a/classstdex_1_1parser_1_1basic__html__value-members.html +++ b/classstdex_1_1parser_1_1basic__html__value-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__value.html b/classstdex_1_1parser_1_1basic__html__value.html index 38e23fe30..fd744d0f8 100644 --- a/classstdex_1_1parser_1_1basic__html__value.html +++ b/classstdex_1_1parser_1_1basic__html__value.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__iban-members.html b/classstdex_1_1parser_1_1basic__iban-members.html index 296e55550..90506b60c 100644 --- a/classstdex_1_1parser_1_1basic__iban-members.html +++ b/classstdex_1_1parser_1_1basic__iban-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__iban.html b/classstdex_1_1parser_1_1basic__iban.html index 3657eaa4a..449595cfd 100644 --- a/classstdex_1_1parser_1_1basic__iban.html +++ b/classstdex_1_1parser_1_1basic__iban.html @@ -244,7 +244,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer-members.html b/classstdex_1_1parser_1_1basic__integer-members.html index 3fac22956..cd6d3555b 100644 --- a/classstdex_1_1parser_1_1basic__integer-members.html +++ b/classstdex_1_1parser_1_1basic__integer-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__integer.html b/classstdex_1_1parser_1_1basic__integer.html index 050cab100..4c5a938bf 100644 --- a/classstdex_1_1parser_1_1basic__integer.html +++ b/classstdex_1_1parser_1_1basic__integer.html @@ -180,7 +180,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer10-members.html b/classstdex_1_1parser_1_1basic__integer10-members.html index ea731a865..87bdd8705 100644 --- a/classstdex_1_1parser_1_1basic__integer10-members.html +++ b/classstdex_1_1parser_1_1basic__integer10-members.html @@ -104,7 +104,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__integer10.html b/classstdex_1_1parser_1_1basic__integer10.html index a3dec1119..9e057c296 100644 --- a/classstdex_1_1parser_1_1basic__integer10.html +++ b/classstdex_1_1parser_1_1basic__integer10.html @@ -234,7 +234,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer10ts-members.html b/classstdex_1_1parser_1_1basic__integer10ts-members.html index aa2fbf987..c9176a785 100644 --- a/classstdex_1_1parser_1_1basic__integer10ts-members.html +++ b/classstdex_1_1parser_1_1basic__integer10ts-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__integer10ts.html b/classstdex_1_1parser_1_1basic__integer10ts.html index 8083f27c1..63f40ff7d 100644 --- a/classstdex_1_1parser_1_1basic__integer10ts.html +++ b/classstdex_1_1parser_1_1basic__integer10ts.html @@ -248,7 +248,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer16-members.html b/classstdex_1_1parser_1_1basic__integer16-members.html index 75ba5d39e..991f0aa1d 100644 --- a/classstdex_1_1parser_1_1basic__integer16-members.html +++ b/classstdex_1_1parser_1_1basic__integer16-members.html @@ -110,7 +110,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__integer16.html b/classstdex_1_1parser_1_1basic__integer16.html index d6b5ea24f..a8f2c61e0 100644 --- a/classstdex_1_1parser_1_1basic__integer16.html +++ b/classstdex_1_1parser_1_1basic__integer16.html @@ -252,7 +252,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__ipv4__address-members.html b/classstdex_1_1parser_1_1basic__ipv4__address-members.html index aecd56bfc..4a4725a02 100644 --- a/classstdex_1_1parser_1_1basic__ipv4__address-members.html +++ b/classstdex_1_1parser_1_1basic__ipv4__address-members.html @@ -105,7 +105,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__ipv4__address.html b/classstdex_1_1parser_1_1basic__ipv4__address.html index ec83334a4..bc2d6b8ef 100644 --- a/classstdex_1_1parser_1_1basic__ipv4__address.html +++ b/classstdex_1_1parser_1_1basic__ipv4__address.html @@ -265,7 +265,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__ipv6__address-members.html b/classstdex_1_1parser_1_1basic__ipv6__address-members.html index 1a7bdc3bd..16edb6b49 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__address-members.html +++ b/classstdex_1_1parser_1_1basic__ipv6__address-members.html @@ -113,7 +113,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__ipv6__address.html b/classstdex_1_1parser_1_1basic__ipv6__address.html index bc037b973..01071fb3d 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__address.html +++ b/classstdex_1_1parser_1_1basic__ipv6__address.html @@ -290,7 +290,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char-members.html b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char-members.html index c89486291..57a175e9a 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char-members.html +++ b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html index 48164f965..1d033a30b 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html +++ b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__iterations-members.html b/classstdex_1_1parser_1_1basic__iterations-members.html index d3e820cb1..a580c3a6d 100644 --- a/classstdex_1_1parser_1_1basic__iterations-members.html +++ b/classstdex_1_1parser_1_1basic__iterations-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__iterations.html b/classstdex_1_1parser_1_1basic__iterations.html index ba290fc8f..7beb8b7be 100644 --- a/classstdex_1_1parser_1_1basic__iterations.html +++ b/classstdex_1_1parser_1_1basic__iterations.html @@ -211,7 +211,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__json__string-members.html b/classstdex_1_1parser_1_1basic__json__string-members.html index 3588dda6b..5d3ea2851 100644 --- a/classstdex_1_1parser_1_1basic__json__string-members.html +++ b/classstdex_1_1parser_1_1basic__json__string-members.html @@ -104,7 +104,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__json__string.html b/classstdex_1_1parser_1_1basic__json__string.html index e4664eac7..308e1ac0b 100644 --- a/classstdex_1_1parser_1_1basic__json__string.html +++ b/classstdex_1_1parser_1_1basic__json__string.html @@ -260,7 +260,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__mime__type-members.html b/classstdex_1_1parser_1_1basic__mime__type-members.html index 01b0bdd09..da685aa06 100644 --- a/classstdex_1_1parser_1_1basic__mime__type-members.html +++ b/classstdex_1_1parser_1_1basic__mime__type-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__mime__type.html b/classstdex_1_1parser_1_1basic__mime__type.html index 80c3fd1b9..025afba20 100644 --- a/classstdex_1_1parser_1_1basic__mime__type.html +++ b/classstdex_1_1parser_1_1basic__mime__type.html @@ -184,7 +184,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__mixed__numeral-members.html b/classstdex_1_1parser_1_1basic__mixed__numeral-members.html index d5c92bb4b..0fdbe9dd8 100644 --- a/classstdex_1_1parser_1_1basic__mixed__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__mixed__numeral-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__mixed__numeral.html b/classstdex_1_1parser_1_1basic__mixed__numeral.html index 71ec4b16b..efdb9f989 100644 --- a/classstdex_1_1parser_1_1basic__mixed__numeral.html +++ b/classstdex_1_1parser_1_1basic__mixed__numeral.html @@ -247,7 +247,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__monetary__numeral-members.html b/classstdex_1_1parser_1_1basic__monetary__numeral-members.html index 7e90a067f..e9e0377d9 100644 --- a/classstdex_1_1parser_1_1basic__monetary__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__monetary__numeral-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__monetary__numeral.html b/classstdex_1_1parser_1_1basic__monetary__numeral.html index a2e4d460c..6e67b8667 100644 --- a/classstdex_1_1parser_1_1basic__monetary__numeral.html +++ b/classstdex_1_1parser_1_1basic__monetary__numeral.html @@ -251,7 +251,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__noop-members.html b/classstdex_1_1parser_1_1basic__noop-members.html index 3f6770424..b284fedf8 100644 --- a/classstdex_1_1parser_1_1basic__noop-members.html +++ b/classstdex_1_1parser_1_1basic__noop-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__noop.html b/classstdex_1_1parser_1_1basic__noop.html index 77045d1b6..4c6aa3772 100644 --- a/classstdex_1_1parser_1_1basic__noop.html +++ b/classstdex_1_1parser_1_1basic__noop.html @@ -188,7 +188,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__parser-members.html b/classstdex_1_1parser_1_1basic__parser-members.html index e5591f4b0..4d446841e 100644 --- a/classstdex_1_1parser_1_1basic__parser-members.html +++ b/classstdex_1_1parser_1_1basic__parser-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__parser.html b/classstdex_1_1parser_1_1basic__parser.html index df537613b..110c0aa7a 100644 --- a/classstdex_1_1parser_1_1basic__parser.html +++ b/classstdex_1_1parser_1_1basic__parser.html @@ -212,7 +212,7 @@ class stdex::parser::basic_parser< T >

Base template for all parse

diff --git a/classstdex_1_1parser_1_1basic__permutation-members.html b/classstdex_1_1parser_1_1basic__permutation-members.html index 9ef1e7d9d..48fcd29ed 100644 --- a/classstdex_1_1parser_1_1basic__permutation-members.html +++ b/classstdex_1_1parser_1_1basic__permutation-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__permutation.html b/classstdex_1_1parser_1_1basic__permutation.html index add26820e..54a51921e 100644 --- a/classstdex_1_1parser_1_1basic__permutation.html +++ b/classstdex_1_1parser_1_1basic__permutation.html @@ -216,7 +216,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__phone__number-members.html b/classstdex_1_1parser_1_1basic__phone__number-members.html index 0adbcbf53..c05b37c9f 100644 --- a/classstdex_1_1parser_1_1basic__phone__number-members.html +++ b/classstdex_1_1parser_1_1basic__phone__number-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__phone__number.html b/classstdex_1_1parser_1_1basic__phone__number.html index 24700e750..fbc708b87 100644 --- a/classstdex_1_1parser_1_1basic__phone__number.html +++ b/classstdex_1_1parser_1_1basic__phone__number.html @@ -246,7 +246,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__punct__cu-members.html b/classstdex_1_1parser_1_1basic__punct__cu-members.html index a2380d2ae..c20b28e88 100644 --- a/classstdex_1_1parser_1_1basic__punct__cu-members.html +++ b/classstdex_1_1parser_1_1basic__punct__cu-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__punct__cu.html b/classstdex_1_1parser_1_1basic__punct__cu.html index 5b0870ba1..f02b7c0d0 100644 --- a/classstdex_1_1parser_1_1basic__punct__cu.html +++ b/classstdex_1_1parser_1_1basic__punct__cu.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__roman__numeral-members.html b/classstdex_1_1parser_1_1basic__roman__numeral-members.html index fc222ecc5..4cdb45dd1 100644 --- a/classstdex_1_1parser_1_1basic__roman__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__roman__numeral-members.html @@ -103,7 +103,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__roman__numeral.html b/classstdex_1_1parser_1_1basic__roman__numeral.html index 906a48ba6..0e00f80fb 100644 --- a/classstdex_1_1parser_1_1basic__roman__numeral.html +++ b/classstdex_1_1parser_1_1basic__roman__numeral.html @@ -231,7 +231,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__scientific__numeral-members.html b/classstdex_1_1parser_1_1basic__scientific__numeral-members.html index 387d7e4d9..9c8533f0a 100644 --- a/classstdex_1_1parser_1_1basic__scientific__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__scientific__numeral-members.html @@ -103,7 +103,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__scientific__numeral.html b/classstdex_1_1parser_1_1basic__scientific__numeral.html index 08952e9a9..c1b25405c 100644 --- a/classstdex_1_1parser_1_1basic__scientific__numeral.html +++ b/classstdex_1_1parser_1_1basic__scientific__numeral.html @@ -267,7 +267,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__score-members.html b/classstdex_1_1parser_1_1basic__score-members.html index be7fc8b97..d53bfefae 100644 --- a/classstdex_1_1parser_1_1basic__score-members.html +++ b/classstdex_1_1parser_1_1basic__score-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__score.html b/classstdex_1_1parser_1_1basic__score.html index 0c5511376..0a5dda4c9 100644 --- a/classstdex_1_1parser_1_1basic__score.html +++ b/classstdex_1_1parser_1_1basic__score.html @@ -236,7 +236,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__sequence-members.html b/classstdex_1_1parser_1_1basic__sequence-members.html index 64c4efbd9..5a3eb83d3 100644 --- a/classstdex_1_1parser_1_1basic__sequence-members.html +++ b/classstdex_1_1parser_1_1basic__sequence-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__sequence.html b/classstdex_1_1parser_1_1basic__sequence.html index 33b94a13c..e71b42efd 100644 --- a/classstdex_1_1parser_1_1basic__sequence.html +++ b/classstdex_1_1parser_1_1basic__sequence.html @@ -209,7 +209,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__set-members.html b/classstdex_1_1parser_1_1basic__set-members.html index d0644a7bb..1191570a6 100644 --- a/classstdex_1_1parser_1_1basic__set-members.html +++ b/classstdex_1_1parser_1_1basic__set-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__set.html b/classstdex_1_1parser_1_1basic__set.html index a978b42e8..b9a07a0bc 100644 --- a/classstdex_1_1parser_1_1basic__set.html +++ b/classstdex_1_1parser_1_1basic__set.html @@ -223,7 +223,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__si__reference-members.html b/classstdex_1_1parser_1_1basic__si__reference-members.html index ed48ac6c0..ebc511db1 100644 --- a/classstdex_1_1parser_1_1basic__si__reference-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference-members.html @@ -102,7 +102,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__si__reference.html b/classstdex_1_1parser_1_1basic__si__reference.html index 30de5322d..8a271aeab 100644 --- a/classstdex_1_1parser_1_1basic__si__reference.html +++ b/classstdex_1_1parser_1_1basic__si__reference.html @@ -265,7 +265,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html b/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html index 113824f8b..3cce255fd 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__si__reference__delimiter.html b/classstdex_1_1parser_1_1basic__si__reference__delimiter.html index 4ff5b9325..f61fe8a91 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__delimiter.html +++ b/classstdex_1_1parser_1_1basic__si__reference__delimiter.html @@ -192,7 +192,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__si__reference__part-members.html b/classstdex_1_1parser_1_1basic__si__reference__part-members.html index b2f6ade17..c18590f56 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__part-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference__part-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__si__reference__part.html b/classstdex_1_1parser_1_1basic__si__reference__part.html index 2732c24bd..62e397db2 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__part.html +++ b/classstdex_1_1parser_1_1basic__si__reference__part.html @@ -192,7 +192,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__signed__numeral-members.html b/classstdex_1_1parser_1_1basic__signed__numeral-members.html index 06697c28c..a79e4c534 100644 --- a/classstdex_1_1parser_1_1basic__signed__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__signed__numeral-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__signed__numeral.html b/classstdex_1_1parser_1_1basic__signed__numeral.html index 9c0a79d10..ac21b67e8 100644 --- a/classstdex_1_1parser_1_1basic__signed__numeral.html +++ b/classstdex_1_1parser_1_1basic__signed__numeral.html @@ -239,7 +239,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__space__cu-members.html b/classstdex_1_1parser_1_1basic__space__cu-members.html index 8fccea865..dc4958fa6 100644 --- a/classstdex_1_1parser_1_1basic__space__cu-members.html +++ b/classstdex_1_1parser_1_1basic__space__cu-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__space__cu.html b/classstdex_1_1parser_1_1basic__space__cu.html index 4639cf4ea..3fb6cd4df 100644 --- a/classstdex_1_1parser_1_1basic__space__cu.html +++ b/classstdex_1_1parser_1_1basic__space__cu.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__space__or__punct__cu-members.html b/classstdex_1_1parser_1_1basic__space__or__punct__cu-members.html index 4c1e75b47..6a675135c 100644 --- a/classstdex_1_1parser_1_1basic__space__or__punct__cu-members.html +++ b/classstdex_1_1parser_1_1basic__space__or__punct__cu-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__space__or__punct__cu.html b/classstdex_1_1parser_1_1basic__space__or__punct__cu.html index f723ee4a4..45a81782b 100644 --- a/classstdex_1_1parser_1_1basic__space__or__punct__cu.html +++ b/classstdex_1_1parser_1_1basic__space__or__punct__cu.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__string-members.html b/classstdex_1_1parser_1_1basic__string-members.html index 0175e9f03..d0f1f3b09 100644 --- a/classstdex_1_1parser_1_1basic__string-members.html +++ b/classstdex_1_1parser_1_1basic__string-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__string.html b/classstdex_1_1parser_1_1basic__string.html index 6ec7aea4d..da7f912df 100644 --- a/classstdex_1_1parser_1_1basic__string.html +++ b/classstdex_1_1parser_1_1basic__string.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__string__branch-members.html b/classstdex_1_1parser_1_1basic__string__branch-members.html index ebc1e8dbe..ad8a0555a 100644 --- a/classstdex_1_1parser_1_1basic__string__branch-members.html +++ b/classstdex_1_1parser_1_1basic__string__branch-members.html @@ -104,7 +104,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__string__branch.html b/classstdex_1_1parser_1_1basic__string__branch.html index 808e27d51..314ce2709 100644 --- a/classstdex_1_1parser_1_1basic__string__branch.html +++ b/classstdex_1_1parser_1_1basic__string__branch.html @@ -185,7 +185,7 @@ class stdex::parser::basic_string_branch< T, T_parser >

Test for a

diff --git a/classstdex_1_1parser_1_1basic__time-members.html b/classstdex_1_1parser_1_1basic__time-members.html index 7e0af7e9f..5efba44c2 100644 --- a/classstdex_1_1parser_1_1basic__time-members.html +++ b/classstdex_1_1parser_1_1basic__time-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__time.html b/classstdex_1_1parser_1_1basic__time.html index 3fd0239f7..1a683db01 100644 --- a/classstdex_1_1parser_1_1basic__time.html +++ b/classstdex_1_1parser_1_1basic__time.html @@ -242,7 +242,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url-members.html b/classstdex_1_1parser_1_1basic__url-members.html index f10593a9d..7efb1ca3e 100644 --- a/classstdex_1_1parser_1_1basic__url-members.html +++ b/classstdex_1_1parser_1_1basic__url-members.html @@ -108,7 +108,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url.html b/classstdex_1_1parser_1_1basic__url.html index 3aa0087f3..094446551 100644 --- a/classstdex_1_1parser_1_1basic__url.html +++ b/classstdex_1_1parser_1_1basic__url.html @@ -272,7 +272,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url__password__char-members.html b/classstdex_1_1parser_1_1basic__url__password__char-members.html index 296499361..4085a6fce 100644 --- a/classstdex_1_1parser_1_1basic__url__password__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__password__char-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url__password__char.html b/classstdex_1_1parser_1_1basic__url__password__char.html index e18325ed1..cc81de8d1 100644 --- a/classstdex_1_1parser_1_1basic__url__password__char.html +++ b/classstdex_1_1parser_1_1basic__url__password__char.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url__path-members.html b/classstdex_1_1parser_1_1basic__url__path-members.html index e2002d968..5a31cdfa2 100644 --- a/classstdex_1_1parser_1_1basic__url__path-members.html +++ b/classstdex_1_1parser_1_1basic__url__path-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url__path.html b/classstdex_1_1parser_1_1basic__url__path.html index d4fbee520..86e0a92f3 100644 --- a/classstdex_1_1parser_1_1basic__url__path.html +++ b/classstdex_1_1parser_1_1basic__url__path.html @@ -242,7 +242,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url__path__char-members.html b/classstdex_1_1parser_1_1basic__url__path__char-members.html index 221d394b4..db22b2a4a 100644 --- a/classstdex_1_1parser_1_1basic__url__path__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__path__char-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url__path__char.html b/classstdex_1_1parser_1_1basic__url__path__char.html index ec199ebfb..610b6ba66 100644 --- a/classstdex_1_1parser_1_1basic__url__path__char.html +++ b/classstdex_1_1parser_1_1basic__url__path__char.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url__username__char-members.html b/classstdex_1_1parser_1_1basic__url__username__char-members.html index 75fdab118..208db59e3 100644 --- a/classstdex_1_1parser_1_1basic__url__username__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__username__char-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url__username__char.html b/classstdex_1_1parser_1_1basic__url__username__char.html index bda5f9717..49f27a776 100644 --- a/classstdex_1_1parser_1_1basic__url__username__char.html +++ b/classstdex_1_1parser_1_1basic__url__username__char.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1http__agent-members.html b/classstdex_1_1parser_1_1http__agent-members.html index 6ee147cf2..909869bf3 100644 --- a/classstdex_1_1parser_1_1http__agent-members.html +++ b/classstdex_1_1parser_1_1http__agent-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__agent.html b/classstdex_1_1parser_1_1http__agent.html index 26c09639c..d49d76fb4 100644 --- a/classstdex_1_1parser_1_1http__agent.html +++ b/classstdex_1_1parser_1_1http__agent.html @@ -220,7 +220,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__any__type-members.html b/classstdex_1_1parser_1_1http__any__type-members.html index f52db62ca..ff6d6e807 100644 --- a/classstdex_1_1parser_1_1http__any__type-members.html +++ b/classstdex_1_1parser_1_1http__any__type-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__any__type.html b/classstdex_1_1parser_1_1http__any__type.html index f86172f6f..0314530f0 100644 --- a/classstdex_1_1parser_1_1http__any__type.html +++ b/classstdex_1_1parser_1_1http__any__type.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__asterisk-members.html b/classstdex_1_1parser_1_1http__asterisk-members.html index 306f97bab..f8c052e10 100644 --- a/classstdex_1_1parser_1_1http__asterisk-members.html +++ b/classstdex_1_1parser_1_1http__asterisk-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__asterisk.html b/classstdex_1_1parser_1_1http__asterisk.html index 63fc895aa..d8d444e8f 100644 --- a/classstdex_1_1parser_1_1http__asterisk.html +++ b/classstdex_1_1parser_1_1http__asterisk.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__cookie-members.html b/classstdex_1_1parser_1_1http__cookie-members.html index e2df4af47..561fd7add 100644 --- a/classstdex_1_1parser_1_1http__cookie-members.html +++ b/classstdex_1_1parser_1_1http__cookie-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__cookie.html b/classstdex_1_1parser_1_1http__cookie.html index 5a3f7c159..0838bac1a 100644 --- a/classstdex_1_1parser_1_1http__cookie.html +++ b/classstdex_1_1parser_1_1http__cookie.html @@ -230,7 +230,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__cookie__parameter-members.html b/classstdex_1_1parser_1_1http__cookie__parameter-members.html index fccdc166b..7e1262dbf 100644 --- a/classstdex_1_1parser_1_1http__cookie__parameter-members.html +++ b/classstdex_1_1parser_1_1http__cookie__parameter-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__cookie__parameter.html b/classstdex_1_1parser_1_1http__cookie__parameter.html index fb8e8620c..e856aa8fe 100644 --- a/classstdex_1_1parser_1_1http__cookie__parameter.html +++ b/classstdex_1_1parser_1_1http__cookie__parameter.html @@ -224,7 +224,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__header-members.html b/classstdex_1_1parser_1_1http__header-members.html index 67f111651..e455deaad 100644 --- a/classstdex_1_1parser_1_1http__header-members.html +++ b/classstdex_1_1parser_1_1http__header-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__header.html b/classstdex_1_1parser_1_1http__header.html index 013e65658..518768ced 100644 --- a/classstdex_1_1parser_1_1http__header.html +++ b/classstdex_1_1parser_1_1http__header.html @@ -224,7 +224,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__language-members.html b/classstdex_1_1parser_1_1http__language-members.html index d5f107ee2..b81b9b710 100644 --- a/classstdex_1_1parser_1_1http__language-members.html +++ b/classstdex_1_1parser_1_1http__language-members.html @@ -87,7 +87,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__language.html b/classstdex_1_1parser_1_1http__language.html index 38c12c664..b1bd20f3d 100644 --- a/classstdex_1_1parser_1_1http__language.html +++ b/classstdex_1_1parser_1_1http__language.html @@ -217,7 +217,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__line__break-members.html b/classstdex_1_1parser_1_1http__line__break-members.html index 634df3b15..2031a1323 100644 --- a/classstdex_1_1parser_1_1http__line__break-members.html +++ b/classstdex_1_1parser_1_1http__line__break-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__line__break.html b/classstdex_1_1parser_1_1http__line__break.html index a8ccc9d49..c57494c2a 100644 --- a/classstdex_1_1parser_1_1http__line__break.html +++ b/classstdex_1_1parser_1_1http__line__break.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__media__range-members.html b/classstdex_1_1parser_1_1http__media__range-members.html index 64515658e..45884006d 100644 --- a/classstdex_1_1parser_1_1http__media__range-members.html +++ b/classstdex_1_1parser_1_1http__media__range-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__media__range.html b/classstdex_1_1parser_1_1http__media__range.html index 6096ebec5..8a9a2453f 100644 --- a/classstdex_1_1parser_1_1http__media__range.html +++ b/classstdex_1_1parser_1_1http__media__range.html @@ -225,7 +225,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__media__type-members.html b/classstdex_1_1parser_1_1http__media__type-members.html index 045d0ebad..b55fede44 100644 --- a/classstdex_1_1parser_1_1http__media__type-members.html +++ b/classstdex_1_1parser_1_1http__media__type-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__media__type.html b/classstdex_1_1parser_1_1http__media__type.html index 1338e999d..4b04645c9 100644 --- a/classstdex_1_1parser_1_1http__media__type.html +++ b/classstdex_1_1parser_1_1http__media__type.html @@ -229,7 +229,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__parameter-members.html b/classstdex_1_1parser_1_1http__parameter-members.html index 00d783c40..e8fbbc959 100644 --- a/classstdex_1_1parser_1_1http__parameter-members.html +++ b/classstdex_1_1parser_1_1http__parameter-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__parameter.html b/classstdex_1_1parser_1_1http__parameter.html index 077f7e3ac..a96ca6bc8 100644 --- a/classstdex_1_1parser_1_1http__parameter.html +++ b/classstdex_1_1parser_1_1http__parameter.html @@ -226,7 +226,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__protocol-members.html b/classstdex_1_1parser_1_1http__protocol-members.html index 21e931d83..111349eae 100644 --- a/classstdex_1_1parser_1_1http__protocol-members.html +++ b/classstdex_1_1parser_1_1http__protocol-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__protocol.html b/classstdex_1_1parser_1_1http__protocol.html index 168cd7826..e48b54ffd 100644 --- a/classstdex_1_1parser_1_1http__protocol.html +++ b/classstdex_1_1parser_1_1http__protocol.html @@ -230,7 +230,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__quoted__string-members.html b/classstdex_1_1parser_1_1http__quoted__string-members.html index 7ab624d09..c53ccff3e 100644 --- a/classstdex_1_1parser_1_1http__quoted__string-members.html +++ b/classstdex_1_1parser_1_1http__quoted__string-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__quoted__string.html b/classstdex_1_1parser_1_1http__quoted__string.html index f5da8e223..a82d723e5 100644 --- a/classstdex_1_1parser_1_1http__quoted__string.html +++ b/classstdex_1_1parser_1_1http__quoted__string.html @@ -222,7 +222,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__request-members.html b/classstdex_1_1parser_1_1http__request-members.html index 74908b9a2..5c3d31305 100644 --- a/classstdex_1_1parser_1_1http__request-members.html +++ b/classstdex_1_1parser_1_1http__request-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__request.html b/classstdex_1_1parser_1_1http__request.html index c1e1503ee..c819e2057 100644 --- a/classstdex_1_1parser_1_1http__request.html +++ b/classstdex_1_1parser_1_1http__request.html @@ -230,7 +230,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__space-members.html b/classstdex_1_1parser_1_1http__space-members.html index d2aefe35a..542b52265 100644 --- a/classstdex_1_1parser_1_1http__space-members.html +++ b/classstdex_1_1parser_1_1http__space-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__space.html b/classstdex_1_1parser_1_1http__space.html index 24f21e502..b09dfd978 100644 --- a/classstdex_1_1parser_1_1http__space.html +++ b/classstdex_1_1parser_1_1http__space.html @@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1http__text__char-members.html b/classstdex_1_1parser_1_1http__text__char-members.html index 8840a3f30..2c055795d 100644 --- a/classstdex_1_1parser_1_1http__text__char-members.html +++ b/classstdex_1_1parser_1_1http__text__char-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__text__char.html b/classstdex_1_1parser_1_1http__text__char.html index e145c346a..6b6eb0c83 100644 --- a/classstdex_1_1parser_1_1http__text__char.html +++ b/classstdex_1_1parser_1_1http__text__char.html @@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1http__token-members.html b/classstdex_1_1parser_1_1http__token-members.html index 471434de6..66974fd4a 100644 --- a/classstdex_1_1parser_1_1http__token-members.html +++ b/classstdex_1_1parser_1_1http__token-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__token.html b/classstdex_1_1parser_1_1http__token.html index 38a4d2546..0360cc396 100644 --- a/classstdex_1_1parser_1_1http__token.html +++ b/classstdex_1_1parser_1_1http__token.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url-members.html b/classstdex_1_1parser_1_1http__url-members.html index c84d77c85..f4b3bbb91 100644 --- a/classstdex_1_1parser_1_1http__url-members.html +++ b/classstdex_1_1parser_1_1http__url-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url.html b/classstdex_1_1parser_1_1http__url.html index 3073b8523..d3043ff36 100644 --- a/classstdex_1_1parser_1_1http__url.html +++ b/classstdex_1_1parser_1_1http__url.html @@ -229,7 +229,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__parameter-members.html b/classstdex_1_1parser_1_1http__url__parameter-members.html index 4a95ea27d..b96647234 100644 --- a/classstdex_1_1parser_1_1http__url__parameter-members.html +++ b/classstdex_1_1parser_1_1http__url__parameter-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__parameter.html b/classstdex_1_1parser_1_1http__url__parameter.html index 397c26862..4361757de 100644 --- a/classstdex_1_1parser_1_1http__url__parameter.html +++ b/classstdex_1_1parser_1_1http__url__parameter.html @@ -220,7 +220,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__path-members.html b/classstdex_1_1parser_1_1http__url__path-members.html index df39b9722..d09ffe4d2 100644 --- a/classstdex_1_1parser_1_1http__url__path-members.html +++ b/classstdex_1_1parser_1_1http__url__path-members.html @@ -87,7 +87,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__path.html b/classstdex_1_1parser_1_1http__url__path.html index 88cf893d3..4c18d562d 100644 --- a/classstdex_1_1parser_1_1http__url__path.html +++ b/classstdex_1_1parser_1_1http__url__path.html @@ -218,7 +218,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__path__segment-members.html b/classstdex_1_1parser_1_1http__url__path__segment-members.html index 8f76dc742..382ab8255 100644 --- a/classstdex_1_1parser_1_1http__url__path__segment-members.html +++ b/classstdex_1_1parser_1_1http__url__path__segment-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__path__segment.html b/classstdex_1_1parser_1_1http__url__path__segment.html index 42dcaf40f..1c5a4a2a1 100644 --- a/classstdex_1_1parser_1_1http__url__path__segment.html +++ b/classstdex_1_1parser_1_1http__url__path__segment.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__port-members.html b/classstdex_1_1parser_1_1http__url__port-members.html index 18dcac444..ffe3fc9e4 100644 --- a/classstdex_1_1parser_1_1http__url__port-members.html +++ b/classstdex_1_1parser_1_1http__url__port-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__port.html b/classstdex_1_1parser_1_1http__url__port.html index b142ac253..218ee1c64 100644 --- a/classstdex_1_1parser_1_1http__url__port.html +++ b/classstdex_1_1parser_1_1http__url__port.html @@ -220,7 +220,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__server-members.html b/classstdex_1_1parser_1_1http__url__server-members.html index d129a8b65..b581fd773 100644 --- a/classstdex_1_1parser_1_1http__url__server-members.html +++ b/classstdex_1_1parser_1_1http__url__server-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__server.html b/classstdex_1_1parser_1_1http__url__server.html index 3c0260f67..fad5b960d 100644 --- a/classstdex_1_1parser_1_1http__url__server.html +++ b/classstdex_1_1parser_1_1http__url__server.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__value-members.html b/classstdex_1_1parser_1_1http__value-members.html index cc49945e5..f2dc784e6 100644 --- a/classstdex_1_1parser_1_1http__value-members.html +++ b/classstdex_1_1parser_1_1http__value-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__value.html b/classstdex_1_1parser_1_1http__value.html index bade57d39..3945242f1 100644 --- a/classstdex_1_1parser_1_1http__value.html +++ b/classstdex_1_1parser_1_1http__value.html @@ -222,7 +222,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__value__collection-members.html b/classstdex_1_1parser_1_1http__value__collection-members.html index ea5fc072f..357109944 100644 --- a/classstdex_1_1parser_1_1http__value__collection-members.html +++ b/classstdex_1_1parser_1_1http__value__collection-members.html @@ -84,7 +84,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__value__collection.html b/classstdex_1_1parser_1_1http__value__collection.html index a3bf3885a..28dce8626 100644 --- a/classstdex_1_1parser_1_1http__value__collection.html +++ b/classstdex_1_1parser_1_1http__value__collection.html @@ -107,7 +107,7 @@ class stdex::parser::http_value_collection< _Key, T >

Collection o

diff --git a/classstdex_1_1parser_1_1http__weight-members.html b/classstdex_1_1parser_1_1http__weight-members.html index 819c0f6fb..dcce70dd1 100644 --- a/classstdex_1_1parser_1_1http__weight-members.html +++ b/classstdex_1_1parser_1_1http__weight-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__weight.html b/classstdex_1_1parser_1_1http__weight.html index d43c4f512..a066971e4 100644 --- a/classstdex_1_1parser_1_1http__weight.html +++ b/classstdex_1_1parser_1_1http__weight.html @@ -221,7 +221,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__weighted__value-members.html b/classstdex_1_1parser_1_1http__weighted__value-members.html index 85e695e34..cf94504fa 100644 --- a/classstdex_1_1parser_1_1http__weighted__value-members.html +++ b/classstdex_1_1parser_1_1http__weighted__value-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__weighted__value.html b/classstdex_1_1parser_1_1http__weighted__value.html index a3830d6db..2ec334af1 100644 --- a/classstdex_1_1parser_1_1http__weighted__value.html +++ b/classstdex_1_1parser_1_1http__weighted__value.html @@ -231,7 +231,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1parser__collection-members.html b/classstdex_1_1parser_1_1parser__collection-members.html index 8709702b5..234bbdd70 100644 --- a/classstdex_1_1parser_1_1parser__collection-members.html +++ b/classstdex_1_1parser_1_1parser__collection-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1parser__collection.html b/classstdex_1_1parser_1_1parser__collection.html index c706f8e8e..9c4ab6ac4 100644 --- a/classstdex_1_1parser_1_1parser__collection.html +++ b/classstdex_1_1parser_1_1parser__collection.html @@ -189,7 +189,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1sgml__any__cp-members.html b/classstdex_1_1parser_1_1sgml__any__cp-members.html index 46121e19a..1a95102fb 100644 --- a/classstdex_1_1parser_1_1sgml__any__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__any__cp-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__any__cp.html b/classstdex_1_1parser_1_1sgml__any__cp.html index 99509e53d..ace431f21 100644 --- a/classstdex_1_1parser_1_1sgml__any__cp.html +++ b/classstdex_1_1parser_1_1sgml__any__cp.html @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__cp-members.html b/classstdex_1_1parser_1_1sgml__cp-members.html index 2b408e151..352a2c832 100644 --- a/classstdex_1_1parser_1_1sgml__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__cp-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__cp.html b/classstdex_1_1parser_1_1sgml__cp.html index 2175c799f..77e6f1236 100644 --- a/classstdex_1_1parser_1_1sgml__cp.html +++ b/classstdex_1_1parser_1_1sgml__cp.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1sgml__cp__set-members.html b/classstdex_1_1parser_1_1sgml__cp__set-members.html index 6bab0398d..ebb42feeb 100644 --- a/classstdex_1_1parser_1_1sgml__cp__set-members.html +++ b/classstdex_1_1parser_1_1sgml__cp__set-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__cp__set.html b/classstdex_1_1parser_1_1sgml__cp__set.html index 2a33ab6ce..de6bf5c60 100644 --- a/classstdex_1_1parser_1_1sgml__cp__set.html +++ b/classstdex_1_1parser_1_1sgml__cp__set.html @@ -210,7 +210,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html b/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html index 96ba509d7..814ae7f3e 100644 --- a/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html +++ b/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__dns__domain__char.html b/classstdex_1_1parser_1_1sgml__dns__domain__char.html index 5c5d00fcd..8d4469b21 100644 --- a/classstdex_1_1parser_1_1sgml__dns__domain__char.html +++ b/classstdex_1_1parser_1_1sgml__dns__domain__char.html @@ -205,7 +205,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char-members.html b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char-members.html index a4d2143ee..97cc67728 100644 --- a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char-members.html +++ b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html index 5cd0e56ce..92a15a537 100644 --- a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html +++ b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html @@ -187,7 +187,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__punct__cp-members.html b/classstdex_1_1parser_1_1sgml__punct__cp-members.html index f0122bbb7..a9d6c79a1 100644 --- a/classstdex_1_1parser_1_1sgml__punct__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__punct__cp-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__punct__cp.html b/classstdex_1_1parser_1_1sgml__punct__cp.html index 927ee17c6..fe55efdd1 100644 --- a/classstdex_1_1parser_1_1sgml__punct__cp.html +++ b/classstdex_1_1parser_1_1sgml__punct__cp.html @@ -200,7 +200,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__space__cp-members.html b/classstdex_1_1parser_1_1sgml__space__cp-members.html index a9cca4e8a..d893ad5e4 100644 --- a/classstdex_1_1parser_1_1sgml__space__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__space__cp-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__space__cp.html b/classstdex_1_1parser_1_1sgml__space__cp.html index 00fffefdc..39e79b6bc 100644 --- a/classstdex_1_1parser_1_1sgml__space__cp.html +++ b/classstdex_1_1parser_1_1sgml__space__cp.html @@ -200,7 +200,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__space__or__punct__cp-members.html b/classstdex_1_1parser_1_1sgml__space__or__punct__cp-members.html index bd28932b6..f451640ab 100644 --- a/classstdex_1_1parser_1_1sgml__space__or__punct__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__space__or__punct__cp-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html b/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html index 5d0f66fb3..72ad5e50b 100644 --- a/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html +++ b/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html @@ -200,7 +200,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__string-members.html b/classstdex_1_1parser_1_1sgml__string-members.html index 58f12d56c..30819ef58 100644 --- a/classstdex_1_1parser_1_1sgml__string-members.html +++ b/classstdex_1_1parser_1_1sgml__string-members.html @@ -87,7 +87,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__string.html b/classstdex_1_1parser_1_1sgml__string.html index e2c3d0e9d..b2b45e08f 100644 --- a/classstdex_1_1parser_1_1sgml__string.html +++ b/classstdex_1_1parser_1_1sgml__string.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1sgml__url__password__char-members.html b/classstdex_1_1parser_1_1sgml__url__password__char-members.html index a5557268a..e40fe2e70 100644 --- a/classstdex_1_1parser_1_1sgml__url__password__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__password__char-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__url__password__char.html b/classstdex_1_1parser_1_1sgml__url__password__char.html index 4a06218c8..189f1edd1 100644 --- a/classstdex_1_1parser_1_1sgml__url__password__char.html +++ b/classstdex_1_1parser_1_1sgml__url__password__char.html @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__url__path__char-members.html b/classstdex_1_1parser_1_1sgml__url__path__char-members.html index db15262af..04d9534e3 100644 --- a/classstdex_1_1parser_1_1sgml__url__path__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__path__char-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__url__path__char.html b/classstdex_1_1parser_1_1sgml__url__path__char.html index 3fd8fa64f..54296d574 100644 --- a/classstdex_1_1parser_1_1sgml__url__path__char.html +++ b/classstdex_1_1parser_1_1sgml__url__path__char.html @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__url__username__char-members.html b/classstdex_1_1parser_1_1sgml__url__username__char-members.html index 21f64e129..b91d7dcd6 100644 --- a/classstdex_1_1parser_1_1sgml__url__username__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__username__char-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__url__username__char.html b/classstdex_1_1parser_1_1sgml__url__username__char.html index 5a83bac03..f594b5f2c 100644 --- a/classstdex_1_1parser_1_1sgml__url__username__char.html +++ b/classstdex_1_1parser_1_1sgml__url__username__char.html @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1pool-members.html b/classstdex_1_1pool-members.html index 0a602fd88..dd46f9812 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 665a4c570..c1731809c 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 f2c1f22d2..3ce28d2d5 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 63f955ce9..b411cdf1b 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 791d1405d..78bef2569 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 48acc7d7d..8543849e0 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 07214f0b5..ad48af3ff 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 e59a779a4..47ad35992 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 dd12c5eff..51a80fe96 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 70236b25a..4408e369a 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 11c765d87..f9f071594 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 2a27ee9d6..63eb34c98 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 2951f7f47..2a56c24e8 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 f19980ad5..2f255365b 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 bcfd2251b..2e6076abd 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 f8ed48049..22f91d214 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 68f50717c..8700dbf79 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 3b940e065..2206bdb54 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 b7560212a..e9561f67d 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 4d44add63..926b501f5 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 2a48927e5..abd6f83d1 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 30eb25d02..02878aaaf 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 7c69ad34b..a97a4ec21 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 6a2965f46..e75c225bb 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 ed18d334a..119689e63 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 92c3c6e40..48a543e2b 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 939e126d1..203ab9bc0 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 b02734492..9c48e25c9 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 a1ab65020..bdb5647a2 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 e8a4fca05..70a350337 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 a26a95a12..c2c1f5840 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 8ec846f95..b25dd62ca 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 f799e66d9..814f75ca5 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 c47b354ce..c3c253213 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 e896125be..bea84e3e3 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 e96a51e4d..b1b7fc104 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 8ded45f27..f12c2df45 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 23815b979..ace064ef0 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 0d0c49951..d3958e66a 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 fbb743c93..ca3d13a6c 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 3c1f8e0fa..2880455ec 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 04d7cdd76..1e6944d47 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 ca5a9533d..3bb3179f8 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 d8edc9487..0b1c93bfc 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 2f21baaa8..18e13db7f 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 e60cf1db9..c880a15c4 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 9a2fe5d75..c1fce6600 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 22bb51a5b..0ec39f94e 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 3268a4dbc..789ecab6e 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 c4685afb5..cff7856a6 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 052e35df5..71cac2d44 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 d2fa35a5f..65a680574 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 d15be25a1..5dd4c1020 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 7d930a76f..db65416b7 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 833450225..cc28e02d4 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 a11a72fdb..5dd58aac2 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 bfbeb1038..e9e6a20d3 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 148af8b11..c46a34c35 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 6222fef54..18c27ce97 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 46631bac6..47892b28d 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 8bce42f8b..aa9219372 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 d5d49ac42..3f3afe37f 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 7c4213d49..29fa73e6b 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 37c4dd860..323feab8c 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 d27b58617..a2ff815e7 100644 --- a/dir_fca3c47b2ea228727bd6729832f89576.html +++ b/dir_fca3c47b2ea228727bd6729832f89576.html @@ -146,7 +146,7 @@ Files diff --git a/endian_8hpp_source.html b/endian_8hpp_source.html index d16655c3a..b0ab77f18 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 6ff544c16..b7998d1ae 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 5b7355c14..d4a15ba26 100644 --- a/files.html +++ b/files.html @@ -124,7 +124,7 @@ $(function() { diff --git a/functions.html b/functions.html index 8e4c47eec..8faa8d10c 100644 --- a/functions.html +++ b/functions.html @@ -94,7 +94,7 @@ $(function() { diff --git a/functions_b.html b/functions_b.html index 5db2e3362..c135a0c1b 100644 --- a/functions_b.html +++ b/functions_b.html @@ -83,7 +83,7 @@ $(function() { diff --git a/functions_c.html b/functions_c.html index fc5bbd081..aaa6d1260 100644 --- a/functions_c.html +++ b/functions_c.html @@ -94,7 +94,7 @@ $(function() { diff --git a/functions_d.html b/functions_d.html index cb35527c4..5170a809f 100644 --- a/functions_d.html +++ b/functions_d.html @@ -87,7 +87,7 @@ $(function() { diff --git a/functions_e.html b/functions_e.html index fe04aaf56..9ab700b0f 100644 --- a/functions_e.html +++ b/functions_e.html @@ -90,7 +90,7 @@ $(function() { diff --git a/functions_f.html b/functions_f.html index 5d26276d2..97afde672 100644 --- a/functions_f.html +++ b/functions_f.html @@ -87,7 +87,7 @@ $(function() { diff --git a/functions_func.html b/functions_func.html index f12b093e0..aa866deb6 100644 --- a/functions_func.html +++ b/functions_func.html @@ -88,7 +88,7 @@ $(function() { diff --git a/functions_func_b.html b/functions_func_b.html index 5fd42f822..04d6aa17f 100644 --- a/functions_func_b.html +++ b/functions_func_b.html @@ -80,7 +80,7 @@ $(function() { diff --git a/functions_func_c.html b/functions_func_c.html index 8a30bac97..f5454352e 100644 --- a/functions_func_c.html +++ b/functions_func_c.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_func_d.html b/functions_func_d.html index 33af6352d..7f49ba105 100644 --- a/functions_func_d.html +++ b/functions_func_d.html @@ -84,7 +84,7 @@ $(function() { diff --git a/functions_func_e.html b/functions_func_e.html index 417ca4932..a4bc0447a 100644 --- a/functions_func_e.html +++ b/functions_func_e.html @@ -82,7 +82,7 @@ $(function() { diff --git a/functions_func_f.html b/functions_func_f.html index 09e98e6d0..a7d85610e 100644 --- a/functions_func_f.html +++ b/functions_func_f.html @@ -86,7 +86,7 @@ $(function() { diff --git a/functions_func_g.html b/functions_func_g.html index ad6b026d8..357ff382a 100644 --- a/functions_func_g.html +++ b/functions_func_g.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_func_h.html b/functions_func_h.html index 6c867edff..9944b42f7 100644 --- a/functions_func_h.html +++ b/functions_func_h.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_func_i.html b/functions_func_i.html index 5c621ff7e..d78313dc5 100644 --- a/functions_func_i.html +++ b/functions_func_i.html @@ -97,7 +97,7 @@ $(function() { diff --git a/functions_func_l.html b/functions_func_l.html index 5ef5ff82b..773164628 100644 --- a/functions_func_l.html +++ b/functions_func_l.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_func_m.html b/functions_func_m.html index aa7307d28..70a1e87d8 100644 --- a/functions_func_m.html +++ b/functions_func_m.html @@ -83,7 +83,7 @@ $(function() { diff --git a/functions_func_n.html b/functions_func_n.html index a5154e521..d886dc12e 100644 --- a/functions_func_n.html +++ b/functions_func_n.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_func_o.html b/functions_func_o.html index c4cb7a7bf..feb667b93 100644 --- a/functions_func_o.html +++ b/functions_func_o.html @@ -90,7 +90,7 @@ $(function() { diff --git a/functions_func_p.html b/functions_func_p.html index b64328c6e..80edb0921 100644 --- a/functions_func_p.html +++ b/functions_func_p.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_func_q.html b/functions_func_q.html index e9e838862..5130e9093 100644 --- a/functions_func_q.html +++ b/functions_func_q.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_func_r.html b/functions_func_r.html index 1dc7e8cf9..96616436d 100644 --- a/functions_func_r.html +++ b/functions_func_r.html @@ -92,7 +92,7 @@ $(function() { diff --git a/functions_func_s.html b/functions_func_s.html index dab67c519..a487f1abb 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -101,7 +101,7 @@ $(function() { diff --git a/functions_func_t.html b/functions_func_t.html index 2131523e1..f0012f55c 100644 --- a/functions_func_t.html +++ b/functions_func_t.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_func_u.html b/functions_func_u.html index 652d3612e..e6ac050dd 100644 --- a/functions_func_u.html +++ b/functions_func_u.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_func_v.html b/functions_func_v.html index 0e7d7ae0c..ee48efeeb 100644 --- a/functions_func_v.html +++ b/functions_func_v.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_func_w.html b/functions_func_w.html index 5aa166905..40b02af77 100644 --- a/functions_func_w.html +++ b/functions_func_w.html @@ -87,7 +87,7 @@ $(function() { diff --git a/functions_func_~.html b/functions_func_~.html index 53800df8d..e8726820e 100644 --- a/functions_func_~.html +++ b/functions_func_~.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_g.html b/functions_g.html index 6b53a7829..a60937aec 100644 --- a/functions_g.html +++ b/functions_g.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_h.html b/functions_h.html index 6b8374b98..230903ea8 100644 --- a/functions_h.html +++ b/functions_h.html @@ -82,7 +82,7 @@ $(function() { diff --git a/functions_i.html b/functions_i.html index e9725f6d5..ae221f481 100644 --- a/functions_i.html +++ b/functions_i.html @@ -100,7 +100,7 @@ $(function() { diff --git a/functions_l.html b/functions_l.html index e8e23fd3c..44ea4068a 100644 --- a/functions_l.html +++ b/functions_l.html @@ -82,7 +82,7 @@ $(function() { diff --git a/functions_m.html b/functions_m.html index 790b1686d..7242cdd43 100644 --- a/functions_m.html +++ b/functions_m.html @@ -124,7 +124,7 @@ $(function() { diff --git a/functions_n.html b/functions_n.html index 29d13f562..d4d508940 100644 --- a/functions_n.html +++ b/functions_n.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_o.html b/functions_o.html index 185c3009f..862828084 100644 --- a/functions_o.html +++ b/functions_o.html @@ -94,7 +94,7 @@ $(function() { diff --git a/functions_p.html b/functions_p.html index c341b997c..d33d3200d 100644 --- a/functions_p.html +++ b/functions_p.html @@ -93,7 +93,7 @@ $(function() { diff --git a/functions_q.html b/functions_q.html index c0e560fb9..0bdfb2861 100644 --- a/functions_q.html +++ b/functions_q.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_r.html b/functions_r.html index 027a8da06..ff018e51c 100644 --- a/functions_r.html +++ b/functions_r.html @@ -95,7 +95,7 @@ $(function() { diff --git a/functions_rela.html b/functions_rela.html index 74c9ff85c..72f1c74f7 100644 --- a/functions_rela.html +++ b/functions_rela.html @@ -77,7 +77,7 @@ $(function() { diff --git a/functions_s.html b/functions_s.html index a4080a22e..0e19c88c9 100644 --- a/functions_s.html +++ b/functions_s.html @@ -109,7 +109,7 @@ $(function() { diff --git a/functions_t.html b/functions_t.html index 7f7b314d0..a1e31e462 100644 --- a/functions_t.html +++ b/functions_t.html @@ -89,7 +89,7 @@ $(function() { diff --git a/functions_type.html b/functions_type.html index 828ade46d..d16d0cb15 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 930920c0d..94bf44c53 100644 --- a/functions_u.html +++ b/functions_u.html @@ -80,7 +80,7 @@ $(function() { diff --git a/functions_v.html b/functions_v.html index 727995799..f66f4764f 100644 --- a/functions_v.html +++ b/functions_v.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_vars.html b/functions_vars.html index a16c94401..0bf4af471 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -262,7 +262,7 @@ $(function() { diff --git a/functions_w.html b/functions_w.html index 10d72bdca..92e3a9be8 100644 --- a/functions_w.html +++ b/functions_w.html @@ -90,7 +90,7 @@ $(function() { diff --git a/functions_~.html b/functions_~.html index dd720c65c..2667c5176 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 81f59c784..b22a6e207 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 49cb50063..756472177 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 45bb46b0b..ae446dd0d 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 5670ea97c..f11ca6b56 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -303,7 +303,7 @@ $(function() { diff --git a/html_8hpp_source.html b/html_8hpp_source.html index ab89019b5..f0652d717 100644 --- a/html_8hpp_source.html +++ b/html_8hpp_source.html @@ -2406,11 +2406,11 @@ $(document).ready(function() { init_codefold(0); });
HTTP token representing an URL.
Definition html.hpp:1957
token_url_t encoding
URL encoding.
Definition html.hpp:1972
std::basic_string< _Elem, _Traits, _Alloc > url
URL.
Definition html.hpp:1971
-
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7835
-
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7750
-
std::vector< html_attribute > attributes
tag attributes
Definition parser.hpp:8357
-
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 > content
content position in source
Definition parser.hpp:7833
+
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7748
+
std::vector< html_attribute > attributes
tag attributes
Definition parser.hpp:8355
+
html_sequence_t type
tag type
Definition parser.hpp:8353
+
stdex::interval< size_t > name
tag name position in source
Definition parser.hpp:8354
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
@@ -2452,12 +2452,12 @@ $(document).ready(function() { init_codefold(0); });
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
+
Tag attribute.
Definition parser.hpp:8127
+
stdex::interval< size_t > value
attribute value position in source
Definition parser.hpp:8129
diff --git a/idrec_8hpp_source.html b/idrec_8hpp_source.html index d6c175fa2..b3b07caa5 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 c0d77a1c0..aa703e073 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 355227f55..5da4c03b6 100644 --- a/index.html +++ b/index.html @@ -84,7 +84,7 @@ Requirements diff --git a/interval_8hpp_source.html b/interval_8hpp_source.html index 81330a111..efb1b2bfb 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 c40666aa3..408bbfb75 100644 --- a/locale_8hpp_source.html +++ b/locale_8hpp_source.html @@ -149,7 +149,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/mapping_8hpp_source.html b/mapping_8hpp_source.html index 61de6c5f6..992511d61 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 bc406f301..a1fea0d5f 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 6a0547be1..d3decfc74 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 978394834..a8f94084b 100644 --- a/memory_8hpp_source.html +++ b/memory_8hpp_source.html @@ -129,7 +129,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/parser_8cpp_source.html b/parser_8cpp_source.html index bdf14cc3b..f175f623e 100644 --- a/parser_8cpp_source.html +++ b/parser_8cpp_source.html @@ -586,8 +586,8 @@ $(document).ready(function() { init_codefold(0); });
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 HTTP header.
Definition parser.hpp:7145
+
Test for HTTP request.
Definition parser.hpp:7008
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
@@ -597,7 +597,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/parser_8hpp_source.html b/parser_8hpp_source.html index b4b04ffc2..ee982bd7e 100644 --- a/parser_8hpp_source.html +++ b/parser_8hpp_source.html @@ -2668,5826 +2668,5824 @@ $(document).ready(function() { init_codefold(0); });
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];
-
2703 components[j] = components[k];
-
2704 }
-
2705 for (; j > compaction_i;) {
-
2706 this->value.s6_words[--j] = 0;
-
2707 components[j].start =
-
2708 components[j].end = compaction_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();
-
2766 basic_parser<T>::invalidate();
-
2767 }
-
2768
-
2769 public:
-
2770 stdex::interval<size_t> components[8];
-
2771 struct in6_addr value;
-
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 };
+
2630 // : found
+
2631 this->interval.end = m_separator->interval.end;
+
2632 if (m_separator->match(text, this->interval.end, end, flags)) {
+
2633 // :: found
+
2634 if (compaction_i == SIZE_MAX) {
+
2635 // Zero compaction start
+
2636 compaction_i = i;
+
2637 compaction_start = m_separator->interval.start;
+
2638 this->interval.end = m_separator->interval.end;
+
2639 }
+
2640 else {
+
2641 // More than one zero compaction
+
2642 break;
+
2643 }
+
2644 }
+
2645 else if (!i) {
+
2646 // Leading : found
+
2647 goto error;
+
2648 }
+
2649 }
+
2650 else if (i) {
+
2651 // : missing
+
2652 break;
+
2653 }
+
2654
+
2655 components[i].start = this->interval.end;
+
2656 size_t x;
+
2657 for (x = 0; this->interval.end < end && text[this->interval.end];) {
+
2658 size_t dig, digit_end;
+
2659 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; digit_end = m_digit_0->interval.end; }
+
2660 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; digit_end = m_digit_1->interval.end; }
+
2661 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; digit_end = m_digit_2->interval.end; }
+
2662 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; digit_end = m_digit_3->interval.end; }
+
2663 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; digit_end = m_digit_4->interval.end; }
+
2664 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; digit_end = m_digit_5->interval.end; }
+
2665 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; digit_end = m_digit_6->interval.end; }
+
2666 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; digit_end = m_digit_7->interval.end; }
+
2667 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; digit_end = m_digit_8->interval.end; }
+
2668 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; digit_end = m_digit_9->interval.end; }
+
2669 else if (m_digit_10->match(text, this->interval.end, end, flags)) { dig = 10; digit_end = m_digit_10->interval.end; }
+
2670 else if (m_digit_11->match(text, this->interval.end, end, flags)) { dig = 11; digit_end = m_digit_11->interval.end; }
+
2671 else if (m_digit_12->match(text, this->interval.end, end, flags)) { dig = 12; digit_end = m_digit_12->interval.end; }
+
2672 else if (m_digit_13->match(text, this->interval.end, end, flags)) { dig = 13; digit_end = m_digit_13->interval.end; }
+
2673 else if (m_digit_14->match(text, this->interval.end, end, flags)) { dig = 14; digit_end = m_digit_14->interval.end; }
+
2674 else if (m_digit_15->match(text, this->interval.end, end, flags)) { dig = 15; digit_end = m_digit_15->interval.end; }
+
2675 else break;
+
2676 size_t x_n = x * 16 + dig;
+
2677 if (x_n <= 0xffff) {
+
2678 x = x_n;
+
2679 this->interval.end = digit_end;
+
2680 is_empty = false;
+
2681 }
+
2682 else
+
2683 break;
+
2684 }
+
2685 if (is_empty) {
+
2686 if (compaction_i != SIZE_MAX) {
+
2687 // Zero compaction active: no sweat.
+
2688 break;
+
2689 }
+
2690 goto error;
+
2691 }
+
2692 components[i].end = this->interval.end;
+
2693 this->value.s6_words[i] = (uint16_t)x;
+
2694 }
+
2695
+
2696 if (compaction_i != SIZE_MAX) {
+
2697 // Align components right due to zero compaction.
+
2698 size_t j, k;
+
2699 for (j = 8, k = i; k > compaction_i;) {
+
2700 this->value.s6_words[--j] = this->value.s6_words[--k];
+
2701 components[j] = components[k];
+
2702 }
+
2703 for (; j > compaction_i;) {
+
2704 this->value.s6_words[--j] = 0;
+
2705 components[j].start =
+
2706 components[j].end = compaction_start;
+
2707 }
+
2708 }
+
2709 else if (i < 8)
+
2710 goto error;
+
2711
+
2712 if (m_scope_id_separator && m_scope_id_separator->match(text, this->interval.end, end, flags) &&
+
2713 scope_id && scope_id->match(text, m_scope_id_separator->interval.end, end, flags))
+
2714 this->interval.end = scope_id->interval.end;
+
2715 else if (scope_id)
+
2716 scope_id->invalidate();
+
2717
+
2718 this->interval.start = start;
+
2719 return true;
+
2720
+
2721 error:
+
2722 components[0].start = 1;
+
2723 components[0].end = 0;
+
2724 components[1].start = 1;
+
2725 components[1].end = 0;
+
2726 components[2].start = 1;
+
2727 components[2].end = 0;
+
2728 components[3].start = 1;
+
2729 components[3].end = 0;
+
2730 components[4].start = 1;
+
2731 components[4].end = 0;
+
2732 components[5].start = 1;
+
2733 components[5].end = 0;
+
2734 components[6].start = 1;
+
2735 components[6].end = 0;
+
2736 components[7].start = 1;
+
2737 components[7].end = 0;
+
2738 memset(&value, 0, sizeof(value));
+
2739 if (scope_id) scope_id->invalidate();
+
2740 this->interval.invalidate();
+
2741 return false;
+
2742 }
+
2743
+
2744 virtual void invalidate()
+
2745 {
+
2746 components[0].start = 1;
+
2747 components[0].end = 0;
+
2748 components[1].start = 1;
+
2749 components[1].end = 0;
+
2750 components[2].start = 1;
+
2751 components[2].end = 0;
+
2752 components[3].start = 1;
+
2753 components[3].end = 0;
+
2754 components[4].start = 1;
+
2755 components[4].end = 0;
+
2756 components[5].start = 1;
+
2757 components[5].end = 0;
+
2758 components[6].start = 1;
+
2759 components[6].end = 0;
+
2760 components[7].start = 1;
+
2761 components[7].end = 0;
+
2762 memset(&value, 0, sizeof(value));
+
2763 if (scope_id) scope_id->invalidate();
+
2764 basic_parser<T>::invalidate();
+
2765 }
+
2766
+
2767 public:
+
2768 stdex::interval<size_t> components[8];
+
2769 struct in6_addr value;
+
2770 std::shared_ptr<basic_parser<T>> scope_id;
+
2771
+
2772 protected:
+
2773 std::shared_ptr<basic_parser<T>>
+
2774 m_digit_0,
+
2775 m_digit_1,
+
2776 m_digit_2,
+
2777 m_digit_3,
+
2778 m_digit_4,
+
2779 m_digit_5,
+
2780 m_digit_6,
+
2781 m_digit_7,
+
2782 m_digit_8,
+
2783 m_digit_9,
+
2784 m_digit_10,
+
2785 m_digit_11,
+
2786 m_digit_12,
+
2787 m_digit_13,
+
2788 m_digit_14,
+
2789 m_digit_15;
+
2790 std::shared_ptr<basic_parser<T>> m_separator, m_scope_id_separator;
+
2791 };
-
2794
-
2795 using ipv6_address = basic_ipv6_address<char>;
-
2796 using wipv6_address = basic_ipv6_address<wchar_t>;
-
2797#ifdef _UNICODE
-
2798 using tipv6_address = wipv6_address;
-
2799#else
-
2800 using tipv6_address = ipv6_address;
-
2801#endif
-
2802 using sgml_ipv6_address = basic_ipv6_address<char>;
-
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 };
+
2792
+ + +
2795#ifdef _UNICODE
+ +
2797#else
+ +
2799#endif
+ +
2801
+
2805 template <class T>
+
+ +
2807 {
+
2808 public:
+ +
2810 _In_ bool allow_idn,
+
2811 _In_ const std::locale& locale = std::locale()) :
+
2812 basic_parser<T>(locale),
+
2813 m_allow_idn(allow_idn),
+
2814 allow_on_edge(true)
+
2815 {}
+
2816
+
2817 virtual bool match(
+
2818 _In_reads_or_z_(end) const T* text,
+
2819 _In_ size_t start = 0,
+
2820 _In_ size_t end = SIZE_MAX,
+
2821 _In_ int flags = match_default)
+
2822 {
+
2823 _Assume_(text || start >= end);
+
2824 if (start < end && text[start]) {
+
2825 if (('A' <= text[start] && text[start] <= 'Z') ||
+
2826 ('a' <= text[start] && text[start] <= 'z') ||
+
2827 ('0' <= text[start] && text[start] <= '9'))
+
2828 allow_on_edge = true;
+
2829 else if (text[start] == '-')
+
2830 allow_on_edge = false;
+
2831 else if (m_allow_idn && std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
+
2832 allow_on_edge = true;
+
2833 else {
+
2834 this->interval.invalidate();
+
2835 return false;
+
2836 }
+
2837 this->interval.end = (this->interval.start = start) + 1;
+
2838 return true;
+
2839 }
+
2840 this->interval.invalidate();
+
2841 return false;
+
2842 }
+
2843
+
2844 public:
+ +
2846
+
2847 protected:
+
2848 bool m_allow_idn;
+
2849 };
-
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 };
+
2850
+ + +
2853#ifdef _UNICODE
+ +
2855#else
+ +
2857#endif
+
2858
+
+ +
2863 {
+
2864 public:
+ +
2866 _In_ bool allow_idn,
+
2867 _In_ const std::locale& locale = std::locale()) :
+ +
2869 {}
+
2870
+
2871 virtual bool match(
+
2872 _In_reads_or_z_(end) const char* text,
+
2873 _In_ size_t start = 0,
+
2874 _In_ size_t end = SIZE_MAX,
+
2875 _In_ int flags = match_default)
+
2876 {
+
2877 _Assume_(text || start >= end);
+
2878 if (start < end && text[start]) {
+
2879 wchar_t buf[3];
+
2880 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
+
2881 const wchar_t* chr_end = chr + stdex::strlen(chr);
+
2882 if ((('A' <= chr[0] && chr[0] <= 'Z') ||
+
2883 ('a' <= chr[0] && chr[0] <= 'z') ||
+
2884 ('0' <= chr[0] && chr[0] <= '9')) && chr[1] == 0)
+
2885 allow_on_edge = true;
+
2886 else if (chr[0] == '-' && chr[1] == 0)
+
2887 allow_on_edge = false;
+
2888 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)
+
2889 allow_on_edge = true;
+
2890 else {
+
2891 this->interval.invalidate();
+
2892 return false;
+
2893 }
+
2894 this->interval.start = start;
+
2895 return true;
+
2896 }
+
2897 this->interval.invalidate();
+
2898 return false;
+
2899 }
+
2900 };
-
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 };
+
2901
+
2905 template <class T>
+
+ +
2907 {
+
2908 public:
+ +
2910 _In_ bool allow_absolute,
+
2911 _In_ const std::shared_ptr<basic_dns_domain_char<T>>& domain_char,
+
2912 _In_ const std::shared_ptr<basic_parser<T>>& separator,
+
2913 _In_ const std::locale& locale = std::locale()) :
+
2914 basic_parser<T>(locale),
+ +
2916 m_domain_char(domain_char),
+
2917 m_separator(separator)
+
2918 {}
+
2919
+
2920 virtual bool match(
+
2921 _In_reads_or_z_(end) const T* text,
+
2922 _In_ size_t start = 0,
+
2923 _In_ size_t end = SIZE_MAX,
+
2924 _In_ int flags = match_default)
+
2925 {
+
2926 _Assume_(text || start >= end);
+
2927 size_t i = start, count;
+
2928 for (count = 0; i < end && text[i] && count < 127; count++) {
+
2929 if (m_domain_char->match(text, i, end, flags) &&
+
2930 m_domain_char->allow_on_edge)
+
2931 {
+
2932 // Domain start
+
2933 this->interval.end = i = m_domain_char->interval.end;
+
2934 while (i < end && text[i]) {
+
2935 if (m_domain_char->allow_on_edge &&
+
2936 m_separator->match(text, i, end, flags))
+
2937 {
+
2938 // Domain end
+
2939 if (m_allow_absolute)
+
2940 this->interval.end = i = m_separator->interval.end;
+
2941 else {
+
2942 this->interval.end = i;
+
2943 i = m_separator->interval.end;
+
2944 }
+
2945 break;
+
2946 }
+
2947 if (m_domain_char->match(text, i, end, flags)) {
+
2948 if (m_domain_char->allow_on_edge)
+
2949 this->interval.end = i = m_domain_char->interval.end;
+
2950 else
+
2951 i = m_domain_char->interval.end;
+
2952 }
+
2953 else {
+
2954 this->interval.start = start;
+
2955 return true;
+
2956 }
+
2957 }
+
2958 }
+
2959 else
+
2960 break;
+
2961 }
+
2962 if (count) {
+
2963 this->interval.start = start;
+
2964 return true;
+
2965 }
+
2966 this->interval.invalidate();
+
2967 return false;
+
2968 }
+
2969
+
2970 protected:
+ +
2972 std::shared_ptr<basic_dns_domain_char<T>> m_domain_char;
+
2973 std::shared_ptr<basic_parser<T>> m_separator;
+
2974 };
-
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 };
+
2975
+ + +
2978#ifdef _UNICODE
+
2979 using tdns_name = wdns_name;
+
2980#else
+
2981 using tdns_name = dns_name;
+
2982#endif
+ +
2984
+
2988 template <class T>
+
+ +
2990 {
+
2991 public:
+
2992 basic_url_username_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
+
2993
+
2994 virtual bool match(
+
2995 _In_reads_or_z_(end) const T* text,
+
2996 _In_ size_t start = 0,
+
2997 _In_ size_t end = SIZE_MAX,
+
2998 _In_ int flags = match_default)
+
2999 {
+
3000 _Assume_(text || start >= end);
+
3001 if (start < end && text[start]) {
+
3002 if (text[start] == '-' ||
+
3003 text[start] == '.' ||
+
3004 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 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
+
3019 {
+
3020 this->interval.end = (this->interval.start = start) + 1;
+
3021 return true;
+
3022 }
+
3023 }
+
3024 this->interval.invalidate();
+
3025 return false;
+
3026 }
+
3027 };
-
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 };
+
3028
+ + +
3031#ifdef _UNICODE
+ +
3033#else
+ +
3035#endif
+
3036
+
+ +
3041 {
+
3042 public:
+
3043 sgml_url_username_char(_In_ const std::locale& locale = std::locale()) : basic_url_username_char<char>(locale) {}
+
3044
+
3045 virtual bool match(
+
3046 _In_reads_or_z_(end) const char* text,
+
3047 _In_ size_t start = 0,
+
3048 _In_ size_t end = SIZE_MAX,
+
3049 _In_ int flags = match_default)
+
3050 {
+
3051 _Assume_(text || start >= end);
+
3052 if (start < end && text[start]) {
+
3053 wchar_t buf[3];
+
3054 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
+
3055 const wchar_t* chr_end = chr + stdex::strlen(chr);
+
3056 if (((chr[0] == L'-' ||
+
3057 chr[0] == L'.' ||
+
3058 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'=') && chr[1] == 0) ||
+
3072 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
+
3073 {
+
3074 this->interval.start = start;
+
3075 return true;
+
3076 }
+
3077 }
+
3078
+
3079 this->interval.invalidate();
+
3080 return false;
+
3081 }
+
3082 };
-
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 };
+
3083
+
3087 template <class T>
+
+ +
3089 {
+
3090 public:
+
3091 basic_url_password_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
+
3092
+
3093 virtual bool match(
+
3094 _In_reads_or_z_(end) const T* text,
+
3095 _In_ size_t start = 0,
+
3096 _In_ size_t end = SIZE_MAX,
+
3097 _In_ int flags = match_default)
+
3098 {
+
3099 _Assume_(text || start >= end);
+
3100 if (start < end && text[start]) {
+
3101 if (text[start] == '-' ||
+
3102 text[start] == '.' ||
+
3103 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 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
+
3119 {
+
3120 this->interval.end = (this->interval.start = start) + 1;
+
3121 return true;
+
3122 }
+
3123 }
+
3124 this->interval.invalidate();
+
3125 return false;
+
3126 }
+
3127 };
-
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 };
+
3128
+ + +
3131#ifdef _UNICODE
+ +
3133#else
+ +
3135#endif
+
3136
+
+ +
3141 {
+
3142 public:
+
3143 sgml_url_password_char(_In_ const std::locale& locale = std::locale()) : basic_url_password_char<char>(locale) {}
+
3144
+
3145 virtual bool match(
+
3146 _In_reads_or_z_(end) const char* text,
+
3147 _In_ size_t start = 0,
+
3148 _In_ size_t end = SIZE_MAX,
+
3149 _In_ int flags = match_default)
+
3150 {
+
3151 _Assume_(text || start >= end);
+
3152 if (start < end && text[start]) {
+
3153 wchar_t buf[3];
+
3154 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
+
3155 const wchar_t* chr_end = chr + stdex::strlen(chr);
+
3156 if (((chr[0] == L'-' ||
+
3157 chr[0] == L'.' ||
+
3158 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':') && chr[1] == 0) ||
+
3173 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
+
3174 {
+
3175 this->interval.start = start;
+
3176 return true;
+
3177 }
+
3178 }
+
3179 this->interval.invalidate();
+
3180 return false;
+
3181 }
+
3182 };
-
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 };
+
3183
+
3187 template <class T>
+
+ +
3189 {
+
3190 public:
+
3191 basic_url_path_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
+
3192
+
3193 virtual bool match(
+
3194 _In_reads_or_z_(end) const T* text,
+
3195 _In_ size_t start = 0,
+
3196 _In_ size_t end = SIZE_MAX,
+
3197 _In_ int flags = match_default)
+
3198 {
+
3199 _Assume_(text || start >= end);
+
3200 if (start < end && text[start]) {
+
3201 if (text[start] == '/' ||
+
3202 text[start] == '-' ||
+
3203 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 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
+
3223 {
+
3224 this->interval.end = (this->interval.start = start) + 1;
+
3225 return true;
+
3226 }
+
3227 }
+
3228 this->interval.invalidate();
+
3229 return false;
+
3230 }
+
3231 };
-
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 };
+
3232
+ + +
3235#ifdef _UNICODE
+ +
3237#else
+ +
3239#endif
+
3240
+
+ +
3245 {
+
3246 public:
+
3247 sgml_url_path_char(_In_ const std::locale& locale = std::locale()) : basic_url_path_char<char>(locale) {}
+
3248
+
3249 virtual bool match(
+
3250 _In_reads_or_z_(end) const char* text,
+
3251 _In_ size_t start = 0,
+
3252 _In_ size_t end = SIZE_MAX,
+
3253 _In_ int flags = match_default)
+
3254 {
+
3255 _Assume_(text || start >= end);
+
3256 if (start < end && text[start]) {
+
3257 wchar_t buf[3];
+
3258 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
+
3259 const wchar_t* chr_end = chr + stdex::strlen(chr);
+
3260 if (((chr[0] == L'/' ||
+
3261 chr[0] == L'-' ||
+
3262 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'#') && chr[1] == 0) ||
+
3281 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
+
3282 {
+
3283 this->interval.start = start;
+
3284 return true;
+
3285 }
+
3286 }
+
3287 this->interval.invalidate();
+
3288 return false;
+
3289 }
+
3290 };
-
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 };
+
3291
+
3295 template <class T>
+
+ +
3297 {
+
3298 public:
+ +
3300 _In_ const std::shared_ptr<basic_parser<T>>& path_char,
+
3301 _In_ const std::shared_ptr<basic_parser<T>>& query_start,
+
3302 _In_ const std::shared_ptr<basic_parser<T>>& bookmark_start,
+
3303 _In_ const std::locale& locale = std::locale()) :
+
3304 basic_parser<T>(locale),
+
3305 m_path_char(path_char),
+
3306 m_query_start(query_start),
+
3307 m_bookmark_start(bookmark_start)
+
3308 {}
+
3309
+
3310 virtual bool match(
+
3311 _In_reads_or_z_(end) const T* text,
+
3312 _In_ size_t start = 0,
+
3313 _In_ size_t end = SIZE_MAX,
+
3314 _In_ int flags = match_default)
+
3315 {
+
3316 _Assume_(text || start >= end);
+
3317
+
3318 this->interval.end = start;
+
3319 path.start = start;
+
3320 query.start = 1;
+
3321 query.end = 0;
+
3322 bookmark.start = 1;
+
3323 bookmark.end = 0;
+
3324
+
3325 for (;;) {
+
3326 if (this->interval.end >= end || !text[this->interval.end])
+
3327 break;
+
3328 if (m_query_start->match(text, this->interval.end, end, flags)) {
+
3329 path.end = this->interval.end;
+
3330 query.start = this->interval.end = m_query_start->interval.end;
+
3331 for (;;) {
+
3332 if (this->interval.end >= end || !text[this->interval.end]) {
+
3333 query.end = this->interval.end;
+
3334 break;
+
3335 }
+
3336 if (m_bookmark_start->match(text, this->interval.end, end, flags)) {
+
3337 query.end = this->interval.end;
+
3338 bookmark.start = this->interval.end = m_bookmark_start->interval.end;
+
3339 for (;;) {
+
3340 if (this->interval.end >= end || !text[this->interval.end]) {
+
3341 bookmark.end = this->interval.end;
+
3342 break;
+
3343 }
+
3344 if (m_path_char->match(text, this->interval.end, end, flags))
+
3345 this->interval.end = m_path_char->interval.end;
+
3346 else {
+
3347 bookmark.end = this->interval.end;
+
3348 break;
+
3349 }
+
3350 }
+
3351 this->interval.start = start;
+
3352 return true;
+
3353 }
+
3354 if (m_path_char->match(text, this->interval.end, end, flags))
+
3355 this->interval.end = m_path_char->interval.end;
+
3356 else {
+
3357 query.end = this->interval.end;
+
3358 break;
+
3359 }
+
3360 }
+
3361 this->interval.start = start;
+
3362 return true;
+
3363 }
+
3364 if (m_bookmark_start->match(text, this->interval.end, end, flags)) {
+
3365 path.end = this->interval.end;
+
3366 bookmark.start = this->interval.end = m_bookmark_start->interval.end;
+
3367 for (;;) {
+
3368 if (this->interval.end >= end || !text[this->interval.end]) {
+
3369 bookmark.end = this->interval.end;
+
3370 break;
+
3371 }
+
3372 if (m_path_char->match(text, this->interval.end, end, flags))
+
3373 this->interval.end = m_path_char->interval.end;
+
3374 else {
+
3375 bookmark.end = this->interval.end;
+
3376 break;
+
3377 }
+
3378 }
+
3379 this->interval.start = start;
+
3380 return true;
+
3381 }
+
3382 if (m_path_char->match(text, this->interval.end, end, flags))
+
3383 this->interval.end = m_path_char->interval.end;
+
3384 else
+
3385 break;
+
3386 }
+
3387
+ +
3389 path.end = this->interval.end;
+
3390 this->interval.start = start;
+
3391 return true;
+
3392 }
+
3393
+
3394 path.start = 1;
+
3395 path.end = 0;
+
3396 bookmark.start = 1;
+
3397 bookmark.end = 0;
+
3398 this->interval.invalidate();
+
3399 return false;
+
3400 }
+
3401
+
3402 virtual void invalidate()
+
3403 {
+
3404 path.start = 1;
+
3405 path.end = 0;
+
3406 query.start = 1;
+
3407 query.end = 0;
+
3408 bookmark.start = 1;
+
3409 bookmark.end = 0;
+ +
3411 }
+
3412
+
3413 public:
+ + +
3416 stdex::interval<size_t> bookmark;
+
3417
+
3418 protected:
+
3419 std::shared_ptr<basic_parser<T>> m_path_char;
+
3420 std::shared_ptr<basic_parser<T>> m_query_start;
+
3421 std::shared_ptr<basic_parser<T>> m_bookmark_start;
+
3422 };
-
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);
+
3423
+ + +
3426#ifdef _UNICODE
+
3427 using turl_path = wurl_path;
+
3428#else
+
3429 using turl_path = url_path;
+
3430#endif
+ +
3432
+
3436 template <class T>
+
+
3437 class basic_url : public basic_parser<T>
+
3438 {
+
3439 public:
+
3440 basic_url(
+
3441 _In_ const std::shared_ptr<basic_parser<T>>& _http_scheme,
+
3442 _In_ const std::shared_ptr<basic_parser<T>>& _ftp_scheme,
+
3443 _In_ const std::shared_ptr<basic_parser<T>>& _mailto_scheme,
+
3444 _In_ const std::shared_ptr<basic_parser<T>>& _file_scheme,
+
3445 _In_ const std::shared_ptr<basic_parser<T>>& colon,
+
3446 _In_ const std::shared_ptr<basic_parser<T>>& slash,
+
3447 _In_ const std::shared_ptr<basic_parser<T>>& _username,
+
3448 _In_ const std::shared_ptr<basic_parser<T>>& _password,
+
3449 _In_ const std::shared_ptr<basic_parser<T>>& at,
+
3450 _In_ const std::shared_ptr<basic_parser<T>>& ip_lbracket,
+
3451 _In_ const std::shared_ptr<basic_parser<T>>& ip_rbracket,
+
3452 _In_ const std::shared_ptr<basic_parser<T>>& _ipv4_host,
+
3453 _In_ const std::shared_ptr<basic_parser<T>>& _ipv6_host,
+
3454 _In_ const std::shared_ptr<basic_parser<T>>& _dns_host,
+
3455 _In_ const std::shared_ptr<basic_parser<T>>& _port,
+
3456 _In_ const std::shared_ptr<basic_parser<T>>& _path,
+
3457 _In_ const std::locale& locale = std::locale()) :
+
3458 basic_parser<T>(locale),
+
3459 http_scheme(_http_scheme),
+
3460 ftp_scheme(_ftp_scheme),
+
3461 mailto_scheme(_mailto_scheme),
+
3462 file_scheme(_file_scheme),
+
3463 m_colon(colon),
+
3464 m_slash(slash),
+
3465 username(_username),
+
3466 password(_password),
+
3467 m_at(at),
+
3468 m_ip_lbracket(ip_lbracket),
+
3469 m_ip_rbracket(ip_rbracket),
+
3470 ipv4_host(_ipv4_host),
+
3471 ipv6_host(_ipv6_host),
+
3472 dns_host(_dns_host),
+
3473 port(_port),
+
3474 path(_path)
+
3475 {}
+
3476
+
3477 virtual bool match(
+
3478 _In_reads_or_z_(end) const T* text,
+
3479 _In_ size_t start = 0,
+
3480 _In_ size_t end = SIZE_MAX,
+
3481 _In_ int flags = match_default)
+
3482 {
+
3483 _Assume_(text || start >= end);
+
3484
+
3485 this->interval.end = start;
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 }
+
3487 if (http_scheme->match(text, this->interval.end, end, flags) &&
+
3488 m_colon->match(text, http_scheme->interval.end, end, flags) &&
+
3489 m_slash->match(text, m_colon->interval.end, end, flags) &&
+
3490 m_slash->match(text, m_slash->interval.end, end, flags))
+
3491 {
+
3492 // http://
+
3493 this->interval.end = m_slash->interval.end;
+
3494 ftp_scheme->invalidate();
+
3495 mailto_scheme->invalidate();
+
3496 file_scheme->invalidate();
+
3497 }
+
3498 else if (ftp_scheme->match(text, this->interval.end, end, flags) &&
+
3499 m_colon->match(text, ftp_scheme->interval.end, end, flags) &&
+
3500 m_slash->match(text, m_colon->interval.end, end, flags) &&
+
3501 m_slash->match(text, m_slash->interval.end, end, flags))
+
3502 {
+
3503 // ftp://
+
3504 this->interval.end = m_slash->interval.end;
+
3505 http_scheme->invalidate();
+
3506 mailto_scheme->invalidate();
+
3507 file_scheme->invalidate();
+
3508 }
+
3509 else if (mailto_scheme->match(text, this->interval.end, end, flags) &&
+
3510 m_colon->match(text, mailto_scheme->interval.end, end, flags))
+
3511 {
+
3512 // mailto:
+
3513 this->interval.end = m_colon->interval.end;
+
3514 http_scheme->invalidate();
+
3515 ftp_scheme->invalidate();
+
3516 file_scheme->invalidate();
+
3517 }
+
3518 else if (file_scheme->match(text, this->interval.end, end, flags) &&
+
3519 m_colon->match(text, file_scheme->interval.end, end, flags) &&
+
3520 m_slash->match(text, m_colon->interval.end, end, flags) &&
+
3521 m_slash->match(text, m_slash->interval.end, end, flags))
+
3522 {
+
3523 // file://
+
3524 this->interval.end = m_slash->interval.end;
+
3525 http_scheme->invalidate();
+
3526 ftp_scheme->invalidate();
+
3527 mailto_scheme->invalidate();
+
3528 }
+
3529 else {
+
3530 // Default to http:
+
3531 http_scheme->invalidate();
+
3532 ftp_scheme->invalidate();
+
3533 mailto_scheme->invalidate();
+
3534 file_scheme->invalidate();
+
3535 }
+
3536
+
3537 if (ftp_scheme->interval) {
+
3538 if (username->match(text, this->interval.end, end, flags)) {
+
3539 if (m_colon->match(text, username->interval.end, end, flags) &&
+
3540 password->match(text, m_colon->interval.end, end, flags) &&
+
3541 m_at->match(text, password->interval.end, end, flags))
+
3542 {
+
3543 // Username and password
+
3544 this->interval.end = m_at->interval.end;
+
3545 }
+
3546 else if (m_at->match(text, this->interval.end, end, flags)) {
+
3547 // Username only
+
3548 this->interval.end = m_at->interval.end;
+
3549 password->invalidate();
+
3550 }
+
3551 else {
+
3552 username->invalidate();
+
3553 password->invalidate();
+
3554 }
+
3555 }
+
3556 else {
+
3557 username->invalidate();
+
3558 password->invalidate();
+
3559 }
+
3560
+
3561 if (ipv4_host->match(text, this->interval.end, end, flags)) {
+
3562 // Host is IPv4
+
3563 this->interval.end = ipv4_host->interval.end;
+
3564 ipv6_host->invalidate();
+
3565 dns_host->invalidate();
+
3566 }
+
3567 else if (
+
3568 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
+
3569 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
+
3570 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
+
3571 {
+
3572 // Host is IPv6
+
3573 this->interval.end = m_ip_rbracket->interval.end;
+
3574 ipv4_host->invalidate();
+
3575 dns_host->invalidate();
+
3576 }
+
3577 else if (dns_host->match(text, this->interval.end, end, flags)) {
+
3578 // Host is hostname
+
3579 this->interval.end = dns_host->interval.end;
+
3580 ipv4_host->invalidate();
+
3581 ipv6_host->invalidate();
+
3582 }
+
3583 else {
+
3584 invalidate();
+
3585 return false;
+
3586 }
+
3587
+
3588 if (m_colon->match(text, this->interval.end, end, flags) &&
+
3589 port->match(text, m_colon->interval.end, end, flags))
+
3590 {
+
3591 // Port
+
3592 this->interval.end = port->interval.end;
+
3593 }
+
3594 else
+
3595 port->invalidate();
+
3596
+
3597 if (path->match(text, this->interval.end, end, flags)) {
+
3598 // Path
+
3599 this->interval.end = path->interval.end;
+
3600 }
+
3601
+
3602 this->interval.start = start;
+
3603 return true;
+
3604 }
+
3605
+
3606 if (mailto_scheme->interval) {
+
3607 if (username->match(text, this->interval.end, end, flags) &&
+
3608 m_at->match(text, username->interval.end, end, flags))
+
3609 {
+
3610 // Username
+
3611 this->interval.end = m_at->interval.end;
+
3612 }
+
3613 else {
+
3614 invalidate();
+
3615 return false;
+
3616 }
+
3617
+
3618 if (m_ip_lbracket->match(text, this->interval.end, end, flags) &&
+
3619 ipv4_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
+
3620 m_ip_rbracket->match(text, ipv4_host->interval.end, end, flags))
+
3621 {
+
3622 // Host is IPv4
+
3623 this->interval.end = m_ip_rbracket->interval.end;
+
3624 ipv6_host->invalidate();
+
3625 dns_host->invalidate();
+
3626 }
+
3627 else if (
+
3628 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
+
3629 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
+
3630 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
+
3631 {
+
3632 // Host is IPv6
+
3633 this->interval.end = m_ip_rbracket->interval.end;
+
3634 ipv4_host->invalidate();
+
3635 dns_host->invalidate();
+
3636 }
+
3637 else if (dns_host->match(text, this->interval.end, end, flags)) {
+
3638 // Host is hostname
+
3639 this->interval.end = dns_host->interval.end;
+
3640 ipv4_host->invalidate();
+
3641 ipv6_host->invalidate();
+
3642 }
+
3643 else {
+
3644 invalidate();
+
3645 return false;
+
3646 }
+
3647
+
3648 password->invalidate();
+
3649 port->invalidate();
+
3650 path->invalidate();
+
3651 this->interval.start = start;
+
3652 return true;
+
3653 }
+
3654
+
3655 if (file_scheme->interval) {
+
3656 if (path->match(text, this->interval.end, end, flags)) {
+
3657 // Path
+
3658 this->interval.end = path->interval.end;
+
3659 }
+
3660
+
3661 username->invalidate();
+
3662 password->invalidate();
+
3663 ipv4_host->invalidate();
+
3664 ipv6_host->invalidate();
+
3665 dns_host->invalidate();
+
3666 port->invalidate();
+
3667 this->interval.start = start;
+
3668 return true;
+
3669 }
+
3670
+
3671 // "http://" found or defaulted to
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 };
+
3673 // If "http://" explicit, test for username&password.
+
3674 if (http_scheme->interval &&
+
3675 username->match(text, this->interval.end, end, flags))
+
3676 {
+
3677 if (m_colon->match(text, username->interval.end, end, flags) &&
+
3678 password->match(text, m_colon->interval.end, end, flags) &&
+
3679 m_at->match(text, password->interval.end, end, flags))
+
3680 {
+
3681 // Username and password
+
3682 this->interval.end = m_at->interval.end;
+
3683 }
+
3684 else if (m_at->match(text, username->interval.end, end, flags)) {
+
3685 // Username only
+
3686 this->interval.end = m_at->interval.end;
+
3687 password->invalidate();
+
3688 }
+
3689 else {
+
3690 username->invalidate();
+
3691 password->invalidate();
+
3692 }
+
3693 }
+
3694 else {
+
3695 username->invalidate();
+
3696 password->invalidate();
+
3697 }
+
3698
+
3699 if (ipv4_host->match(text, this->interval.end, end, flags)) {
+
3700 // Host is IPv4
+
3701 this->interval.end = ipv4_host->interval.end;
+
3702 ipv6_host->invalidate();
+
3703 dns_host->invalidate();
+
3704 }
+
3705 else if (
+
3706 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
+
3707 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
+
3708 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
+
3709 {
+
3710 // Host is IPv6
+
3711 this->interval.end = m_ip_rbracket->interval.end;
+
3712 ipv4_host->invalidate();
+
3713 dns_host->invalidate();
+
3714 }
+
3715 else if (dns_host->match(text, this->interval.end, end, flags)) {
+
3716 // Host is hostname
+
3717 this->interval.end = dns_host->interval.end;
+
3718 ipv4_host->invalidate();
+
3719 ipv6_host->invalidate();
+
3720 }
+
3721 else {
+
3722 invalidate();
+
3723 return false;
+
3724 }
+
3725
+
3726 if (m_colon->match(text, this->interval.end, end, flags) &&
+
3727 port->match(text, m_colon->interval.end, end, flags))
+
3728 {
+
3729 // Port
+
3730 this->interval.end = port->interval.end;
+
3731 }
+
3732 else
+
3733 port->invalidate();
+
3734
+
3735 if (path->match(text, this->interval.end, end, flags)) {
+
3736 // Path
+
3737 this->interval.end = path->interval.end;
+
3738 }
+
3739
+
3740 this->interval.start = start;
+
3741 return true;
+
3742 }
+
3743
+
3744 virtual void invalidate()
+
3745 {
+
3746 http_scheme->invalidate();
+
3747 ftp_scheme->invalidate();
+
3748 mailto_scheme->invalidate();
+
3749 file_scheme->invalidate();
+
3750 username->invalidate();
+
3751 password->invalidate();
+
3752 ipv4_host->invalidate();
+
3753 ipv6_host->invalidate();
+
3754 dns_host->invalidate();
+
3755 port->invalidate();
+
3756 path->invalidate();
+ +
3758 }
+
3759
+
3760 public:
+
3761 std::shared_ptr<basic_parser<T>> http_scheme;
+
3762 std::shared_ptr<basic_parser<T>> ftp_scheme;
+
3763 std::shared_ptr<basic_parser<T>> mailto_scheme;
+
3764 std::shared_ptr<basic_parser<T>> file_scheme;
+
3765 std::shared_ptr<basic_parser<T>> username;
+
3766 std::shared_ptr<basic_parser<T>> password;
+
3767 std::shared_ptr<basic_parser<T>> ipv4_host;
+
3768 std::shared_ptr<basic_parser<T>> ipv6_host;
+
3769 std::shared_ptr<basic_parser<T>> dns_host;
+
3770 std::shared_ptr<basic_parser<T>> port;
+
3771 std::shared_ptr<basic_parser<T>> path;
+
3772
+
3773 protected:
+
3774 std::shared_ptr<basic_parser<T>> m_colon;
+
3775 std::shared_ptr<basic_parser<T>> m_slash;
+
3776 std::shared_ptr<basic_parser<T>> m_at;
+
3777 std::shared_ptr<basic_parser<T>> m_ip_lbracket;
+
3778 std::shared_ptr<basic_parser<T>> m_ip_rbracket;
+
3779 };
-
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 };
+
3780
+
3781 using url = basic_url<char>;
+
3782 using wurl = basic_url<wchar_t>;
+
3783#ifdef _UNICODE
+
3784 using turl = wurl;
+
3785#else
+
3786 using turl = url;
+
3787#endif
+
3788 using sgml_url = basic_url<char>;
+
3789
+
3793 template <class T>
+
+ +
3795 {
+
3796 public:
+ +
3798 _In_ const std::shared_ptr<basic_parser<T>>& _username,
+
3799 _In_ const std::shared_ptr<basic_parser<T>>& at,
+
3800 _In_ const std::shared_ptr<basic_parser<T>>& ip_lbracket,
+
3801 _In_ const std::shared_ptr<basic_parser<T>>& ip_rbracket,
+
3802 _In_ const std::shared_ptr<basic_parser<T>>& _ipv4_host,
+
3803 _In_ const std::shared_ptr<basic_parser<T>>& _ipv6_host,
+
3804 _In_ const std::shared_ptr<basic_parser<T>>& _dns_host,
+
3805 _In_ const std::locale& locale = std::locale()) :
+
3806 basic_parser<T>(locale),
+
3807 username(_username),
+
3808 m_at(at),
+
3809 m_ip_lbracket(ip_lbracket),
+
3810 m_ip_rbracket(ip_rbracket),
+
3811 ipv4_host(_ipv4_host),
+
3812 ipv6_host(_ipv6_host),
+
3813 dns_host(_dns_host)
+
3814 {}
+
3815
+
3816 virtual bool match(
+
3817 _In_reads_or_z_(end) const T* text,
+
3818 _In_ size_t start = 0,
+
3819 _In_ size_t end = SIZE_MAX,
+
3820 _In_ int flags = match_default)
+
3821 {
+
3822 _Assume_(text || start >= end);
+
3823
+
3824 if (username->match(text, start, end, flags) &&
+
3825 m_at->match(text, username->interval.end, end, flags))
+
3826 {
+
3827 // Username@
+
3828 if (m_ip_lbracket->match(text, m_at->interval.end, end, flags) &&
+
3829 ipv4_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
+
3830 m_ip_rbracket->match(text, ipv4_host->interval.end, end, flags))
+
3831 {
+
3832 // Host is IPv4
+
3833 this->interval.end = m_ip_rbracket->interval.end;
+
3834 ipv6_host->invalidate();
+
3835 dns_host->invalidate();
+
3836 }
+
3837 else if (
+
3838 m_ip_lbracket->match(text, m_at->interval.end, end, flags) &&
+
3839 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
+
3840 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
+
3841 {
+
3842 // Host is IPv6
+
3843 this->interval.end = m_ip_rbracket->interval.end;
+
3844 ipv4_host->invalidate();
+
3845 dns_host->invalidate();
+
3846 }
+
3847 else if (dns_host->match(text, m_at->interval.end, end, flags)) {
+
3848 // Host is hostname
+
3849 this->interval.end = dns_host->interval.end;
+
3850 ipv4_host->invalidate();
+
3851 ipv6_host->invalidate();
+
3852 }
+
3853 else
+
3854 goto error;
+
3855 this->interval.start = start;
+
3856 return true;
+
3857 }
+
3858
+
3859 error:
+
3860 username->invalidate();
+
3861 ipv4_host->invalidate();
+
3862 ipv6_host->invalidate();
+
3863 dns_host->invalidate();
+
3864 this->interval.invalidate();
+
3865 return false;
+
3866 }
+
3867
+
3868 virtual void invalidate()
+
3869 {
+
3870 username->invalidate();
+
3871 ipv4_host->invalidate();
+
3872 ipv6_host->invalidate();
+
3873 dns_host->invalidate();
+ +
3875 }
+
3876
+
3877 public:
+
3878 std::shared_ptr<basic_parser<T>> username;
+
3879 std::shared_ptr<basic_parser<T>> ipv4_host;
+
3880 std::shared_ptr<basic_parser<T>> ipv6_host;
+
3881 std::shared_ptr<basic_parser<T>> dns_host;
+
3882
+
3883 protected:
+
3884 std::shared_ptr<basic_parser<T>> m_at;
+
3885 std::shared_ptr<basic_parser<T>> m_ip_lbracket;
+
3886 std::shared_ptr<basic_parser<T>> m_ip_rbracket;
+
3887 };
-
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 }
+
3888
+ + +
3891#ifdef _UNICODE
+ +
3893#else
+ +
3895#endif
+ +
3897
+
3901 template <class T>
+
+ +
3903 {
+
3904 public:
+ +
3906 _In_ const std::shared_ptr<basic_parser<T>>& _emoticon,
+
3907 _In_ const std::shared_ptr<basic_parser<T>>& _apex,
+
3908 _In_ const std::shared_ptr<basic_parser<T>>& _eyes,
+
3909 _In_ const std::shared_ptr<basic_parser<T>>& _nose,
+
3910 _In_ const std::shared_ptr<basic_set<T>>& _mouth,
+
3911 _In_ const std::locale& locale = std::locale()) :
+
3912 basic_parser<T>(locale),
+ +
3914 apex(_apex),
+
3915 eyes(_eyes),
+
3916 nose(_nose),
+
3917 mouth(_mouth)
+
3918 {}
+
3919
+
3920 virtual bool match(
+
3921 _In_reads_or_z_(end) const T* text,
+
3922 _In_ size_t start = 0,
+
3923 _In_ size_t end = SIZE_MAX,
+
3924 _In_ int flags = match_default)
+
3925 {
+
3926 _Assume_(text || start >= end);
+
3927
+
3928 if (emoticon && emoticon->match(text, start, end, flags)) {
+
3929 if (apex) apex->invalidate();
+
3930 eyes->invalidate();
+
3931 if (nose) nose->invalidate();
+
3932 mouth->invalidate();
+
3933 this->interval.start = start;
+
3934 this->interval.end = emoticon->interval.end;
+
3935 return true;
+
3936 }
+
3937
+
3938 this->interval.end = start;
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 };
+
3940 if (apex && apex->match(text, this->interval.end, end, flags))
+
3941 this->interval.end = apex->interval.end;
+
3942
+
3943 if (eyes->match(text, this->interval.end, end, flags)) {
+
3944 if (nose && nose->match(text, eyes->interval.end, end, flags) &&
+
3945 mouth->match(text, nose->interval.end, end, flags))
+
3946 {
+
3947 size_t
+ +
3949 hit_offset = mouth->hit_offset;
+
3950 // Mouth may repeat :-)))))))
+
3951 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);
+
3952 mouth->interval.start = start_mouth;
+
3953 mouth->interval.end = this->interval.end;
+
3954 this->interval.start = start;
+
3955 return true;
+
3956 }
+
3957 if (mouth->match(text, eyes->interval.end, end, flags)) {
+
3958 size_t
+ +
3960 hit_offset = mouth->hit_offset;
+
3961 // Mouth may repeat :-)))))))
+
3962 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);
+
3963 if (nose) nose->invalidate();
+
3964 mouth->interval.start = start_mouth;
+
3965 mouth->interval.end = this->interval.end;
+
3966 this->interval.start = start;
+
3967 return true;
+
3968 }
+
3969 }
+
3970
+
3971 if (emoticon) emoticon->invalidate();
+
3972 if (apex) apex->invalidate();
+
3973 eyes->invalidate();
+
3974 if (nose) nose->invalidate();
+
3975 mouth->invalidate();
+
3976 this->interval.invalidate();
+
3977 return false;
+
3978 }
+
3979
+
3980 virtual void invalidate()
+
3981 {
+
3982 if (emoticon) emoticon->invalidate();
+
3983 if (apex) apex->invalidate();
+
3984 eyes->invalidate();
+
3985 if (nose) nose->invalidate();
+
3986 mouth->invalidate();
+ +
3988 }
+
3989
+
3990 public:
+
3991 std::shared_ptr<basic_parser<T>> emoticon;
+
3992 std::shared_ptr<basic_parser<T>> apex;
+
3993 std::shared_ptr<basic_parser<T>> eyes;
+
3994 std::shared_ptr<basic_parser<T>> nose;
+
3995 std::shared_ptr<basic_set<T>> mouth;
+
3996 };
-
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 };
+
3997
+ + +
4000#ifdef _UNICODE
+
4001 using temoticon = wemoticon;
+
4002#else
+
4003 using temoticon = emoticon;
+
4004#endif
+ +
4006
+
4010 enum date_format_t {
+
4011 date_format_none = 0,
+
4012 date_format_dmy = 0x1,
+
4013 date_format_mdy = 0x2,
+
4014 date_format_ymd = 0x4,
+
4015 date_format_ym = 0x8,
+
4016 date_format_my = 0x10,
+
4017 date_format_dm = 0x20,
+
4018 date_format_md = 0x40,
+
4019 };
+
4020
+
4024 template <class T>
+
+
4025 class basic_date : public basic_parser<T>
+
4026 {
+
4027 public:
+
4028 basic_date(
+
4029 _In_ int format_mask,
+
4030 _In_ const std::shared_ptr<basic_integer<T>>& _day,
+
4031 _In_ const std::shared_ptr<basic_integer<T>>& _month,
+
4032 _In_ const std::shared_ptr<basic_integer<T>>& _year,
+
4033 _In_ const std::shared_ptr<basic_set<T>>& separator,
+
4034 _In_ const std::shared_ptr<basic_parser<T>>& space,
+
4035 _In_ const std::locale& locale = std::locale()) :
+
4036 basic_parser<T>(locale),
+
4037 format(date_format_none),
+
4038 m_format_mask(format_mask),
+
4039 day(_day),
+
4040 month(_month),
+
4041 year(_year),
+
4042 m_separator(separator),
+
4043 m_space(space)
+
4044 {}
+
4045
+
4046 virtual bool match(
+
4047 _In_reads_or_z_(end) const T* text,
+
4048 _In_ size_t start = 0,
+
4049 _In_ size_t end = SIZE_MAX,
+
4050 _In_ int flags = match_default)
+
4051 {
+
4052 _Assume_(text || start >= end);
+
4053
+
4054 const int space_match_flags = flags & ~match_multiline; // Spaces in dates must never be broken in new line.
+
4055 if ((m_format_mask & date_format_dmy) == date_format_dmy) {
+
4056 if (day->match(text, start, end, flags)) {
+
4057 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);
+
4058 if (m_separator->match(text, this->interval.end, end, flags)) {
+
4059 size_t hit_offset = m_separator->hit_offset;
+
4060 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);
+
4061 if (month->match(text, this->interval.end, end, flags)) {
+
4062 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);
+
4063 if (m_separator->match(text, this->interval.end, end, flags) &&
+
4064 m_separator->hit_offset == hit_offset) // Both separators must match.
+
4065 {
+
4066 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);
+
4067 if (year->match(text, this->interval.end, end, flags) &&
+
4068 is_valid(day->value, month->value))
+
4069 {
+
4070 this->interval.start = start;
+
4071 this->interval.end = year->interval.end;
+
4072 format = date_format_dmy;
+
4073 return true;
+
4074 }
+
4075 }
+
4076 }
+
4077 }
+
4078 }
+
4079 }
+
4080
+
4081 if ((m_format_mask & date_format_mdy) == date_format_mdy) {
+
4082 if (month->match(text, start, end, flags)) {
+
4083 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);
+
4084 if (m_separator->match(text, this->interval.end, end, flags)) {
+
4085 size_t hit_offset = m_separator->hit_offset;
+
4086 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);
+
4087 if (day->match(text, this->interval.end, end, flags)) {
+
4088 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);
+
4089 if (m_separator->match(text, this->interval.end, end, flags) &&
+
4090 m_separator->hit_offset == hit_offset) // Both separators must match.
+
4091 {
+
4092 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);
+
4093 if (year->match(text, this->interval.end, end, flags) &&
+
4094 is_valid(day->value, month->value))
+
4095 {
+
4096 this->interval.start = start;
+
4097 this->interval.end = year->interval.end;
+
4098 format = date_format_mdy;
+
4099 return true;
+
4100 }
+
4101 }
+
4102 }
+
4103 }
+
4104 }
+
4105 }
+
4106
+
4107 if ((m_format_mask & date_format_ymd) == date_format_ymd) {
+
4108 if (year->match(text, start, end, flags)) {
+
4109 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);
+
4110 if (m_separator->match(text, this->interval.end, end, flags)) {
+
4111 size_t hit_offset = m_separator->hit_offset;
+
4112 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);
+
4113 if (month->match(text, this->interval.end, end, flags)) {
+
4114 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);
+
4115 if (m_separator->match(text, this->interval.end, end, flags) &&
+
4116 m_separator->hit_offset == hit_offset) // Both separators must match.
+
4117 {
+
4118 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);
+
4119 if (day->match(text, this->interval.end, end, flags) &&
+
4120 is_valid(day->value, month->value))
+
4121 {
+
4122 this->interval.start = start;
+
4123 this->interval.end = day->interval.end;
+
4124 format = date_format_ymd;
+
4125 return true;
+
4126 }
+
4127 }
+
4128 }
+
4129 }
+
4130 }
+
4131 }
+
4132
+
4133 if ((m_format_mask & date_format_ym) == date_format_ym) {
+
4134 if (year->match(text, start, end, flags)) {
+
4135 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);
+
4136 if (m_separator->match(text, this->interval.end, end, flags)) {
+
4137 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);
+
4138 if (month->match(text, this->interval.end, end, flags) &&
+
4139 is_valid(SIZE_MAX, month->value))
+
4140 {
+
4141 if (day) day->invalidate();
+
4142 this->interval.start = start;
+
4143 this->interval.end = month->interval.end;
+
4144 format = date_format_ym;
+
4145 return true;
+
4146 }
+
4147 }
+
4148 }
+
4149 }
+
4150
+
4151 if ((m_format_mask & date_format_my) == date_format_my) {
+
4152 if (month->match(text, start, end, flags)) {
+
4153 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);
+
4154 if (m_separator->match(text, this->interval.end, end, flags)) {
+
4155 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);
+
4156 if (year->match(text, this->interval.end, end, flags) &&
+
4157 is_valid(SIZE_MAX, month->value))
+
4158 {
+
4159 if (day) day->invalidate();
+
4160 this->interval.start = start;
+
4161 this->interval.end = year->interval.end;
+
4162 format = date_format_my;
+
4163 return true;
+
4164 }
+
4165 }
+
4166 }
+
4167 }
+
4168
+
4169 if ((m_format_mask & date_format_dm) == date_format_dm) {
+
4170 if (day->match(text, start, end, flags)) {
+
4171 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);
+
4172 if (m_separator->match(text, this->interval.end, end, flags)) {
+
4173 size_t hit_offset = m_separator->hit_offset;
+
4174 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);
+
4175 if (month->match(text, this->interval.end, end, flags) &&
+
4176 is_valid(day->value, month->value))
+
4177 {
+
4178 if (year) year->invalidate();
+
4179 this->interval.start = start;
+
4180 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);
+
4181 if (m_separator->match(text, this->interval.end, end, flags) &&
+
4182 m_separator->hit_offset == hit_offset) // Both separators must match.
+
4183 this->interval.end = m_separator->interval.end;
+
4184 else
+
4185 this->interval.end = month->interval.end;
+
4186 format = date_format_dm;
+
4187 return true;
+
4188 }
+
4189 }
+
4190 }
+
4191 }
+
4192
+
4193 if ((m_format_mask & date_format_md) == date_format_md) {
+
4194 if (month->match(text, start, end, flags)) {
+
4195 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);
+
4196 if (m_separator->match(text, this->interval.end, end, flags)) {
+
4197 size_t hit_offset = m_separator->hit_offset;
+
4198 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);
+
4199 if (day->match(text, this->interval.end, end, flags) &&
+
4200 is_valid(day->value, month->value))
+
4201 {
+
4202 if (year) year->invalidate();
+
4203 this->interval.start = start;
+
4204 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);
+
4205 if (m_separator->match(text, this->interval.end, end, flags) &&
+
4206 m_separator->hit_offset == hit_offset) // Both separators must match.
+
4207 this->interval.end = m_separator->interval.end;
+
4208 else
+
4209 this->interval.end = day->interval.end;
+
4210 format = date_format_md;
+
4211 return true;
+
4212 }
+
4213 }
+
4214 }
+
4215 }
+
4216
+
4217 if (day) day->invalidate();
+
4218 if (month) month->invalidate();
+
4219 if (year) year->invalidate();
+
4220 format = date_format_none;
+
4221 this->interval.invalidate();
+
4222 return false;
+
4223 }
+
4224
+
4225 virtual void invalidate()
+
4226 {
+
4227 if (day) day->invalidate();
+
4228 if (month) month->invalidate();
+
4229 if (year) year->invalidate();
+
4230 format = date_format_none;
+ +
4232 }
+
4233
+
4234 protected:
+
4235 static inline bool is_valid(size_t day, size_t month)
+
4236 {
+
4237 if (month == SIZE_MAX) {
+
4238 // Default to January. This allows validating day only, as January has all 31 days.
+
4239 month = 1;
+
4240 }
+
4241 if (day == SIZE_MAX) {
+
4242 // Default to 1st day in month. This allows validating month only, as each month has 1st day.
+
4243 day = 1;
+
4244 }
+
4245
+
4246 switch (month) {
+
4247 case 1:
+
4248 case 3:
+
4249 case 5:
+
4250 case 7:
+
4251 case 8:
+
4252 case 10:
+
4253 case 12:
+
4254 return 1 <= day && day <= 31;
+
4255 case 2:
+
4256 return 1 <= day && day <= 29;
+
4257 case 4:
+
4258 case 6:
+
4259 case 9:
+
4260 case 11:
+
4261 return 1 <= day && day <= 30;
+
4262 default:
+
4263 return false;
+
4264 }
+
4265 }
+
4266
+
4267 public:
+
4268 date_format_t format;
+
4269 std::shared_ptr<basic_integer<T>> day;
+
4270 std::shared_ptr<basic_integer<T>> month;
+
4271 std::shared_ptr<basic_integer<T>> year;
+
4272
+
4273 protected:
+
4274 int m_format_mask;
+
4275 std::shared_ptr<basic_set<T>> m_separator;
+
4276 std::shared_ptr<basic_parser<T>> m_space;
+
4277 };
-
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 };
+
4278
+
4279 using date = basic_date<char>;
+
4280 using wdate = basic_date<wchar_t>;
+
4281#ifdef _UNICODE
+
4282 using tdate = wdate;
+
4283#else
+
4284 using tdate = date;
+
4285#endif
+ +
4287
+
4291 template <class T>
+
+
4292 class basic_time : public basic_parser<T>
+
4293 {
+
4294 public:
+
4295 basic_time(
+
4296 _In_ const std::shared_ptr<basic_integer10<T>>& _hour,
+
4297 _In_ const std::shared_ptr<basic_integer10<T>>& _minute,
+
4298 _In_ const std::shared_ptr<basic_integer10<T>>& _second,
+
4299 _In_ const std::shared_ptr<basic_integer10<T>>& _millisecond,
+
4300 _In_ const std::shared_ptr<basic_set<T>>& separator,
+
4301 _In_ const std::shared_ptr<basic_parser<T>>& millisecond_separator,
+
4302 _In_ const std::locale& locale = std::locale()) :
+
4303 basic_parser<T>(locale),
+
4304 hour(_hour),
+
4305 minute(_minute),
+
4306 second(_second),
+
4307 millisecond(_millisecond),
+
4308 m_separator(separator),
+
4309 m_millisecond_separator(millisecond_separator)
+
4310 {}
+
4311
+
4312 virtual bool match(
+
4313 _In_reads_or_z_(end) const T* text,
+
4314 _In_ size_t start = 0,
+
4315 _In_ size_t end = SIZE_MAX,
+
4316 _In_ int flags = match_default)
+
4317 {
+
4318 _Assume_(text || start >= end);
+
4319
+
4320 if (hour->match(text, start, end, flags) &&
+
4321 m_separator->match(text, hour->interval.end, end, flags) &&
+
4322 minute->match(text, m_separator->interval.end, end, flags) &&
+
4323 minute->value < 60)
+
4324 {
+
4325 // hh::mm
+
4326 size_t hit_offset = m_separator->hit_offset;
+
4327 if (m_separator->match(text, minute->interval.end, end, flags) &&
+
4328 m_separator->hit_offset == hit_offset && // Both separators must match.
+
4329 second && second->match(text, m_separator->interval.end, end, flags) &&
+
4330 second->value < 60)
+
4331 {
+
4332 // hh::mm:ss
+
4333 if (m_millisecond_separator && m_millisecond_separator->match(text, second->interval.end, end, flags) &&
+
4334 millisecond && millisecond->match(text, m_millisecond_separator->interval.end, end, flags) &&
+
4335 millisecond->value < 1000)
+
4336 {
+
4337 // hh::mm:ss.mmmm
+
4338 this->interval.end = millisecond->interval.end;
+
4339 }
+
4340 else {
+
4341 if (millisecond) millisecond->invalidate();
+
4342 this->interval.end = second->interval.end;
+
4343 }
+
4344 }
+
4345 else {
+
4346 if (second) second->invalidate();
+
4347 if (millisecond) millisecond->invalidate();
+
4348 this->interval.end = minute->interval.end;
+
4349 }
+
4350 this->interval.start = start;
+
4351 return true;
+
4352 }
+
4353
+
4354 hour->invalidate();
+
4355 minute->invalidate();
+
4356 if (second) second->invalidate();
+
4357 if (millisecond) millisecond->invalidate();
+
4358 this->interval.invalidate();
+
4359 return false;
+
4360 }
+
4361
+
4362 virtual void invalidate()
+
4363 {
+
4364 hour->invalidate();
+
4365 minute->invalidate();
+
4366 if (second) second->invalidate();
+
4367 if (millisecond) millisecond->invalidate();
+ +
4369 }
+
4370
+
4371 public:
+
4372 std::shared_ptr<basic_integer10<T>> hour;
+
4373 std::shared_ptr<basic_integer10<T>> minute;
+
4374 std::shared_ptr<basic_integer10<T>> second;
+
4375 std::shared_ptr<basic_integer10<T>> millisecond;
+
4376
+
4377 protected:
+
4378 std::shared_ptr<basic_set<T>> m_separator;
+
4379 std::shared_ptr<basic_parser<T>> m_millisecond_separator;
+
4380 };
-
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);
+
4381
+
4382 using time = basic_time<char>;
+
4383 using wtime = basic_time<wchar_t>;
+
4384#ifdef _UNICODE
+
4385 using ttime = wtime;
+
4386#else
+
4387 using ttime = time;
+
4388#endif
+ +
4390
+
4394 template <class T>
+
+
4395 class basic_angle : public basic_parser<T>
+
4396 {
+
4397 public:
+ +
4399 _In_ const std::shared_ptr<basic_integer10<T>>& _degree,
+
4400 _In_ const std::shared_ptr<basic_parser<T>>& _degree_separator,
+
4401 _In_ const std::shared_ptr<basic_integer10<T>>& _minute,
+
4402 _In_ const std::shared_ptr<basic_parser<T>>& _minute_separator,
+
4403 _In_ const std::shared_ptr<basic_integer10<T>>& _second,
+
4404 _In_ const std::shared_ptr<basic_parser<T>>& _second_separator,
+
4405 _In_ const std::shared_ptr<basic_parser<T>>& _decimal,
+
4406 _In_ const std::locale& locale = std::locale()) :
+
4407 basic_parser<T>(locale),
+
4408 degree(_degree),
+
4409 degree_separator(_degree_separator),
+
4410 minute(_minute),
+
4411 minute_separator(_minute_separator),
+
4412 second(_second),
+
4413 second_separator(_second_separator),
+
4414 decimal(_decimal)
+
4415 {}
+
4416
+
4417 virtual bool match(
+
4418 _In_reads_or_z_(end) const T* text,
+
4419 _In_ size_t start = 0,
+
4420 _In_ size_t end = SIZE_MAX,
+
4421 _In_ int flags = match_default)
+
4422 {
+
4423 _Assume_(text || start >= end);
+
4424
+
4425 this->interval.end = start;
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 };
+
4427 if (degree->match(text, this->interval.end, end, flags) &&
+
4428 degree_separator->match(text, degree->interval.end, end, flags))
+
4429 {
+
4430 // Degrees
+
4431 this->interval.end = degree_separator->interval.end;
+
4432 }
+
4433 else {
+
4434 degree->invalidate();
+
4435 degree_separator->invalidate();
+
4436 }
+
4437
+
4438 if (minute->match(text, this->interval.end, end, flags) &&
+
4439 minute->value < 60 &&
+
4440 minute_separator->match(text, minute->interval.end, end, flags))
+
4441 {
+
4442 // Minutes
+
4443 this->interval.end = minute_separator->interval.end;
+
4444 }
+
4445 else {
+
4446 minute->invalidate();
+
4447 minute_separator->invalidate();
+
4448 }
+
4449
+
4450 if (second && second->match(text, this->interval.end, end, flags) &&
+
4451 second->value < 60)
+
4452 {
+
4453 // Seconds
+
4454 this->interval.end = second->interval.end;
+
4455 if (second_separator && second_separator->match(text, this->interval.end, end, flags))
+
4456 this->interval.end = second_separator->interval.end;
+
4457 else
+
4458 if (second_separator) second_separator->invalidate();
+
4459 }
+
4460 else {
+
4461 if (second) second->invalidate();
+
4462 if (second_separator) second_separator->invalidate();
+
4463 }
+
4464
+
4465 if (degree->interval.start < degree->interval.end ||
+
4466 minute->interval.start < minute->interval.end ||
+
4467 (second && second->interval.start < second->interval.end))
+
4468 {
+
4469 if (decimal && decimal->match(text, this->interval.end, end, flags)) {
+
4470 // Decimals
+
4471 this->interval.end = decimal->interval.end;
+
4472 }
+
4473 else if (decimal)
+
4474 decimal->invalidate();
+
4475 this->interval.start = start;
+
4476 return true;
+
4477 }
+
4478 if (decimal) decimal->invalidate();
+
4479 this->interval.invalidate();
+
4480 return false;
+
4481 }
+
4482
+
4483 virtual void invalidate()
+
4484 {
+
4485 degree->invalidate();
+
4486 degree_separator->invalidate();
+
4487 minute->invalidate();
+
4488 minute_separator->invalidate();
+
4489 if (second) second->invalidate();
+
4490 if (second_separator) second_separator->invalidate();
+
4491 if (decimal) decimal->invalidate();
+ +
4493 }
+
4494
+
4495 public:
+
4496 std::shared_ptr<basic_integer10<T>> degree;
+
4497 std::shared_ptr<basic_parser<T>> degree_separator;
+
4498 std::shared_ptr<basic_integer10<T>> minute;
+
4499 std::shared_ptr<basic_parser<T>> minute_separator;
+
4500 std::shared_ptr<basic_integer10<T>> second;
+
4501 std::shared_ptr<basic_parser<T>> second_separator;
+
4502 std::shared_ptr<basic_parser<T>> decimal;
+
4503 };
-
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 };
+
4504
+
4505 using angle = basic_angle<char>;
+ +
4507#ifdef _UNICODE
+
4508 using RRegElKot = wangle;
+
4509#else
+
4510 using RRegElKot = angle;
+
4511#endif
+ +
4513
+
4517 template <class T>
+
+ +
4519 {
+
4520 public:
+ +
4522 _In_ const std::shared_ptr<basic_parser<T>>& digit,
+
4523 _In_ const std::shared_ptr<basic_parser<T>>& plus_sign,
+
4524 _In_ const std::shared_ptr<basic_set<T>>& lparenthesis,
+
4525 _In_ const std::shared_ptr<basic_set<T>>& rparenthesis,
+
4526 _In_ const std::shared_ptr<basic_parser<T>>& separator,
+
4527 _In_ const std::shared_ptr<basic_parser<T>>& space,
+
4528 _In_ const std::locale& locale = std::locale()) :
+
4529 basic_parser<T>(locale),
+
4530 m_digit(digit),
+
4531 m_plus_sign(plus_sign),
+
4532 m_lparenthesis(lparenthesis),
+
4533 m_rparenthesis(rparenthesis),
+
4534 m_separator(separator),
+
4535 m_space(space)
+
4536 {}
+
4537
+
4538 virtual bool match(
+
4539 _In_reads_or_z_(end) const T* text,
+
4540 _In_ size_t start = 0,
+
4541 _In_ size_t end = SIZE_MAX,
+
4542 _In_ int flags = match_default)
+
4543 {
+
4544 _Assume_(text || start >= end);
+
4545
+
4546 size_t safe_digit_end = start, safe_value_size = 0;
+
4547 bool has_digits = false, after_digit = false, in_parentheses = false, after_parentheses = false;
+
4548 const int space_match_flags = flags & ~match_multiline; // Spaces in phone numbers must never be broken in new line.
+
4549
+
4550 this->interval.end = start;
+
4551 value.clear();
+
4552 m_lparenthesis->invalidate();
+
4553 m_rparenthesis->invalidate();
+
4554
+
4555 if (m_plus_sign && m_plus_sign->match(text, this->interval.end, end, flags)) {
+
4556 value.append(text + m_plus_sign->interval.start, text + m_plus_sign->interval.end);
+
4557 safe_value_size = value.size();
+
4558 this->interval.end = m_plus_sign->interval.end;
+
4559 }
+
4560
+
4561 for (;;) {
+
4562 _Assume_(text || this->interval.end >= end);
+
4563 if (this->interval.end >= end || !text[this->interval.end])
+
4564 break;
+
4565 if (m_digit->match(text, this->interval.end, end, flags)) {
+
4566 // Digit
+
4567 value.append(text + m_digit->interval.start, text + m_digit->interval.end);
+
4568 this->interval.end = m_digit->interval.end;
+
4569 if (!in_parentheses) {
+
4570 safe_digit_end = this->interval.end;
+
4571 safe_value_size = value.size();
+
4572 has_digits = true;
+
4573 }
+
4574 after_digit = true;
+
4575 after_parentheses = false;
+
4576 }
+
4577 else if (
+
4578 m_lparenthesis && !m_lparenthesis->interval && // No left parenthesis yet
+
4579 m_rparenthesis && !m_rparenthesis->interval && // Right parenthesis after left
+
4580 m_lparenthesis->match(text, this->interval.end, end, flags))
+
4581 {
+
4582 // Left parenthesis
+
4583 value.append(text + m_lparenthesis->interval.start, m_lparenthesis->interval.size());
+
4584 this->interval.end = m_lparenthesis->interval.end;
+
4585 in_parentheses = true;
+
4586 after_digit = false;
+
4587 after_parentheses = false;
+
4588 }
+
4589 else if (
+
4590 in_parentheses && // After left parenthesis
+
4591 m_rparenthesis && !m_rparenthesis->interval && // No right parenthesis yet
+
4592 m_rparenthesis->match(text, this->interval.end, end, flags) &&
+
4593 m_lparenthesis->hit_offset == m_rparenthesis->hit_offset) // Left and right parentheses must match
+
4594 {
+
4595 // Right parenthesis
+
4596 value.append(text + m_rparenthesis->interval.start, text + m_rparenthesis->interval.end);
+
4597 this->interval.end = m_rparenthesis->interval.end;
+
4598 safe_digit_end = this->interval.end;
+
4599 safe_value_size = value.size();
+
4600 in_parentheses = false;
+
4601 after_digit = false;
+
4602 after_parentheses = true;
+
4603 }
+
4604 else if (
+
4605 after_digit &&
+
4606 !in_parentheses && // No separators inside parentheses
+
4607 !after_parentheses && // No separators following right parenthesis
+
4608 m_separator && m_separator->match(text, this->interval.end, end, flags))
+
4609 {
+
4610 // Separator
+
4611 this->interval.end = m_separator->interval.end;
+
4612 after_digit = false;
+
4613 after_parentheses = false;
+
4614 }
+
4615 else if (
+ +
4617 m_space && m_space->match(text, this->interval.end, end, space_match_flags))
+
4618 {
+
4619 // Space
+
4620 this->interval.end = m_space->interval.end;
+
4621 after_digit = false;
+
4622 after_parentheses = false;
+
4623 }
+
4624 else
+
4625 break;
+
4626 }
+
4627 if (has_digits) {
+
4628 value.erase(safe_value_size);
+
4629 this->interval.start = start;
+
4630 this->interval.end = safe_digit_end;
+
4631 return true;
+
4632 }
+
4633 value.clear();
+
4634 this->interval.invalidate();
+
4635 return false;
+
4636 }
+
4637
+
4638 virtual void invalidate()
+
4639 {
+
4640 value.clear();
+ +
4642 }
+
4643
+
4644 public:
+
4645 std::basic_string<T> value;
+
4646
+
4647 protected:
+
4648 std::shared_ptr<basic_parser<T>> m_digit;
+
4649 std::shared_ptr<basic_parser<T>> m_plus_sign;
+
4650 std::shared_ptr<basic_set<T>> m_lparenthesis;
+
4651 std::shared_ptr<basic_set<T>> m_rparenthesis;
+
4652 std::shared_ptr<basic_parser<T>> m_separator;
+
4653 std::shared_ptr<basic_parser<T>> m_space;
+
4654 };
-
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 };
+
4655
+ + +
4658#ifdef _UNICODE
+ +
4660#else
+ +
4662#endif
+ +
4664
+
4670 template <class T>
+
+
4671 class basic_iban : public basic_parser<T>
+
4672 {
+
4673 public:
+
4674 basic_iban(
+
4675 _In_ const std::shared_ptr<basic_parser<T>>& space,
+
4676 _In_ const std::locale& locale = std::locale()) :
+
4677 basic_parser<T>(locale),
+
4678 m_space(space)
+
4679 {
+
4680 this->country[0] = 0;
+
4681 this->check_digits[0] = 0;
+
4682 this->bban[0] = 0;
+
4683 this->is_valid = false;
+
4684 }
+
4685
+
4686 virtual bool match(
+
4687 _In_reads_or_z_(end) const T* text,
+
4688 _In_ size_t start = 0,
+
4689 _In_ size_t end = SIZE_MAX,
+
4690 _In_ int flags = match_default)
+
4691 {
+
4692 _Assume_(text || start >= end);
+
4693 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
+
4694 const bool case_insensitive = flags & match_case_insensitive ? true : false;
+
4695 struct country_t {
+
4696 T country[2];
+
4697 T check_digits[2];
+
4698 size_t length;
+
4699 };
+
4700 static const country_t s_countries[] = {
+
4701 { { 'A', 'D' }, {}, 24 }, // Andorra
+
4702 { { 'A', 'E' }, {}, 23 }, // United Arab Emirates
+
4703 { { 'A', 'L' }, {}, 28 }, // Albania
+
4704 { { 'A', 'O' }, {}, 25 }, // Angola
+
4705 { { 'A', 'T' }, {}, 20 }, // Austria
+
4706 { { 'A', 'Z' }, {}, 28 }, // Azerbaijan
+
4707 { { 'B', 'A' }, { '3', '9' }, 20}, // Bosnia and Herzegovina
+
4708 { { 'B', 'E' }, {}, 16 }, // Belgium
+
4709 { { 'B', 'F' }, {}, 28 }, // Burkina Faso
+
4710 { { 'B', 'G' }, {}, 22 }, // Bulgaria
+
4711 { { 'B', 'H' }, {}, 22 }, // Bahrain
+
4712 { { 'B', 'I' }, {}, 27 }, // Burundi
+
4713 { { 'B', 'J' }, {}, 28 }, // Benin
+
4714 { { 'B', 'R' }, {}, 29 }, // Brazil
+
4715 { { 'B', 'Y' }, {}, 28 }, // Belarus
+
4716 { { 'C', 'F' }, {}, 27 }, // Central African Republic
+
4717 { { 'C', 'G' }, {}, 27 }, // Congo, Republic of the
+
4718 { { 'C', 'H' }, {}, 21 }, // Switzerland
+
4719 { { 'C', 'I' }, {}, 28 }, // Côte d'Ivoire
+
4720 { { 'C', 'M' }, {}, 27 }, // Cameroon
+
4721 { { 'C', 'R' }, {}, 22 }, // Costa Rica
+
4722 { { 'C', 'V' }, {}, 25 }, // Cabo Verde
+
4723 { { 'C', 'Y' }, {}, 28 }, // Cyprus
+
4724 { { 'C', 'Z' }, {}, 24 }, // Czech Republic
+
4725 { { 'D', 'E' }, {}, 22 }, // Germany
+
4726 { { 'D', 'J' }, {}, 27 }, // Djibouti
+
4727 { { 'D', 'K' }, {}, 18 }, // Denmark
+
4728 { { 'D', 'O' }, {}, 28 }, // Dominican Republic
+
4729 { { 'D', 'Z' }, {}, 26 }, // Algeria
+
4730 { { 'E', 'E' }, {}, 20 }, // Estonia
+
4731 { { 'E', 'G' }, {}, 29 }, // Egypt
+
4732 { { 'E', 'S' }, {}, 24 }, // Spain
+
4733 { { 'F', 'I' }, {}, 18 }, // Finland
+
4734 { { 'F', 'O' }, {}, 18 }, // Faroe Islands
+
4735 { { 'F', 'R' }, {}, 27 }, // France
+
4736 { { 'G', 'A' }, {}, 27 }, // Gabon
+
4737 { { 'G', 'B' }, {}, 22 }, // United Kingdom
+
4738 { { 'G', 'E' }, {}, 22 }, // Georgia
+
4739 { { 'G', 'I' }, {}, 23 }, // Gibraltar
+
4740 { { 'G', 'L' }, {}, 18 }, // Greenland
+
4741 { { 'G', 'Q' }, {}, 27 }, // Equatorial Guinea
+
4742 { { 'G', 'R' }, {}, 27 }, // Greece
+
4743 { { 'G', 'T' }, {}, 28 }, // Guatemala
+
4744 { { 'G', 'W' }, {}, 25 }, // Guinea-Bissau
+
4745 { { 'H', 'N' }, {}, 28 }, // Honduras
+
4746 { { 'H', 'R' }, {}, 21 }, // Croatia
+
4747 { { 'H', 'U' }, {}, 28 }, // Hungary
+
4748 { { 'I', 'E' }, {}, 22 }, // Ireland
+
4749 { { 'I', 'L' }, {}, 23 }, // Israel
+
4750 { { 'I', 'Q' }, {}, 23 }, // Iraq
+
4751 { { 'I', 'R' }, {}, 26 }, // Iran
+
4752 { { 'I', 'S' }, {}, 26 }, // Iceland
+
4753 { { 'I', 'T' }, {}, 27 }, // Italy
+
4754 { { 'J', 'O' }, {}, 30 }, // Jordan
+
4755 { { 'K', 'M' }, {}, 27 }, // Comoros
+
4756 { { 'K', 'W' }, {}, 30 }, // Kuwait
+
4757 { { 'K', 'Z' }, {}, 20 }, // Kazakhstan
+
4758 { { 'L', 'B' }, {}, 28 }, // Lebanon
+
4759 { { 'L', 'C' }, {}, 32 }, // Saint Lucia
+
4760 { { 'L', 'I' }, {}, 21 }, // Liechtenstein
+
4761 { { 'L', 'T' }, {}, 20 }, // Lithuania
+
4762 { { 'L', 'U' }, {}, 20 }, // Luxembourg
+
4763 { { 'L', 'V' }, {}, 21 }, // Latvia
+
4764 { { 'L', 'Y' }, {}, 25 }, // Libya
+
4765 { { 'M', 'A' }, {}, 28 }, // Morocco
+
4766 { { 'M', 'C' }, {}, 27 }, // Monaco
+
4767 { { 'M', 'D' }, {}, 24 }, // Moldova
+
4768 { { 'M', 'E' }, { '2', '5' }, 22 }, // Montenegro
+
4769 { { 'M', 'G' }, {}, 27 }, // Madagascar
+
4770 { { 'M', 'K' }, { '0', '7' }, 19 }, // North Macedonia
+
4771 { { 'M', 'L' }, {}, 28 }, // Mali
+
4772 { { 'M', 'R' }, { '1', '3' }, 27}, // Mauritania
+
4773 { { 'M', 'T' }, {}, 31 }, // Malta
+
4774 { { 'M', 'U' }, {}, 30 }, // Mauritius
+
4775 { { 'M', 'Z' }, {}, 25 }, // Mozambique
+
4776 { { 'N', 'E' }, {}, 28 }, // Niger
+
4777 { { 'N', 'I' }, {}, 32 }, // Nicaragua
+
4778 { { 'N', 'L' }, {}, 18 }, // Netherlands
+
4779 { { 'N', 'O' }, {}, 15 }, // Norway
+
4780 { { 'P', 'K' }, {}, 24 }, // Pakistan
+
4781 { { 'P', 'L' }, {}, 28 }, // Poland
+
4782 { { 'P', 'S' }, {}, 29 }, // Palestinian territories
+
4783 { { 'P', 'T' }, { '5', '0' }, 25 }, // Portugal
+
4784 { { 'Q', 'A' }, {}, 29 }, // Qatar
+
4785 { { 'R', 'O' }, {}, 24 }, // Romania
+
4786 { { 'R', 'S' }, { '3', '5' }, 22 }, // Serbia
+
4787 { { 'R', 'U' }, {}, 33 }, // Russia
+
4788 { { 'S', 'A' }, {}, 24 }, // Saudi Arabia
+
4789 { { 'S', 'C' }, {}, 31 }, // Seychelles
+
4790 { { 'S', 'D' }, {}, 18 }, // Sudan
+
4791 { { 'S', 'E' }, {}, 24 }, // Sweden
+
4792 { { 'S', 'I' }, { '5', '6' }, 19 }, // Slovenia
+
4793 { { 'S', 'K' }, {}, 24 }, // Slovakia
+
4794 { { 'S', 'M' }, {}, 27 }, // San Marino
+
4795 { { 'S', 'N' }, {}, 28 }, // Senegal
+
4796 { { 'S', 'T' }, {}, 25 }, // São Tomé and Príncipe
+
4797 { { 'S', 'V' }, {}, 28 }, // El Salvador
+
4798 { { 'T', 'D' }, {}, 27 }, // Chad
+
4799 { { 'T', 'G' }, {}, 28 }, // Togo
+
4800 { { 'T', 'L' }, { '3', '8' }, 23}, // East Timor
+
4801 { { 'T', 'N' }, { '5', '9' }, 24 }, // Tunisia
+
4802 { { 'T', 'R' }, {}, 26 }, // Turkey
+
4803 { { 'U', 'A' }, {}, 29 }, // Ukraine
+
4804 { { 'V', 'A' }, {}, 22 }, // Vatican City
+
4805 { { 'V', 'G' }, {}, 24 }, // Virgin Islands, British
+
4806 { { 'X', 'K' }, {}, 20 }, // Kosovo
+
4807 };
+
4808 const country_t* country_desc = nullptr;
+
4809 size_t n, available, next, bban_length;
+ +
4811
+
4812 this->interval.end = start;
+
4813 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
+
4814 if (this->interval.end >= end || !text[this->interval.end])
+
4815 goto error; // incomplete country code
+
4816 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
+
4817 if (chr < 'A' || 'Z' < chr)
+
4818 goto error; // invalid country code
+
4819 this->country[i] = chr;
+
4820 }
+
4821 for (size_t l = 0, r = _countof(s_countries);;) {
+
4822 if (l >= r)
+
4823 goto error; // unknown country
+
4824 size_t m = (l + r) / 2;
+
4825 const country_t& c = s_countries[m];
+
4826 if (c.country[0] < this->country[0] || (c.country[0] == this->country[0] && c.country[1] < this->country[1]))
+
4827 l = m + 1;
+
4828 else if (this->country[0] < c.country[0] || (this->country[0] == c.country[0] && this->country[1] < c.country[1]))
+
4829 r = m;
+
4830 else {
+
4831 country_desc = &c;
+
4832 break;
+
4833 }
+
4834 }
+
4835 this->country[2] = 0;
+
4836
+
4837 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
+
4838 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
+
4839 goto error; // incomplete or invalid check digits
+
4840 this->check_digits[i] = text[this->interval.end];
+
4841 }
+
4842 this->check_digits[2] = 0;
+
4843
+
4844 if ((country_desc->check_digits[0] && this->check_digits[0] != country_desc->check_digits[0]) ||
+
4845 (country_desc->check_digits[1] && this->check_digits[1] != country_desc->check_digits[1]))
+
4846 goto error; // unexpected check digits
+
4847
+
4848 bban_length = country_desc->length - 4;
+
4849 for (n = 0; n < bban_length;) {
+
4850 if (this->interval.end >= end || !text[this->interval.end])
+
4851 goto error; // bban too short
+
4852 if (m_space && m_space->match(text, this->interval.end, end, flags)) {
+
4853 this->interval.end = m_space->interval.end;
+
4854 continue;
+
4855 }
+
4856 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
+
4857 if (('0' <= chr && chr <= '9') || ('A' <= chr && chr <= 'Z')) {
+
4858 this->bban[n++] = chr;
+
4859 this->interval.end++;
+
4860 }
+
4861 else
+
4862 goto error; // invalid bban
+
4863 }
+
4864 this->bban[n] = 0;
+
4865
+
4866 // Normalize IBAN.
+
4867 T normalized[69];
+
4868 available = 0;
+
4869 for (size_t i = 0; ; ++i) {
+
4870 if (!this->bban[i]) {
+
4871 for (i = 0; i < 2; ++i) {
+
4872 if ('A' <= this->country[i] && this->country[i] <= 'J') {
+
4873 normalized[available++] = '1';
+
4874 normalized[available++] = '0' + this->country[i] - 'A';
+
4875 }
+
4876 else if ('K' <= this->country[i] && this->country[i] <= 'T') {
+
4877 normalized[available++] = '2';
+
4878 normalized[available++] = '0' + this->country[i] - 'K';
+
4879 }
+
4880 else if ('U' <= this->country[i] && this->country[i] <= 'Z') {
+
4881 normalized[available++] = '3';
+
4882 normalized[available++] = '0' + this->country[i] - 'U';
+
4883 }
+
4884 }
+
4885 normalized[available++] = this->check_digits[0];
+
4886 normalized[available++] = this->check_digits[1];
+
4887 normalized[available] = 0;
+
4888 break;
+
4889 }
+
4890 if ('0' <= this->bban[i] && this->bban[i] <= '9')
+
4891 normalized[available++] = this->bban[i];
+
4892 else if ('A' <= this->bban[i] && this->bban[i] <= 'J') {
+
4893 normalized[available++] = '1';
+
4894 normalized[available++] = '0' + this->bban[i] - 'A';
+
4895 }
+
4896 else if ('K' <= this->bban[i] && this->bban[i] <= 'T') {
+
4897 normalized[available++] = '2';
+
4898 normalized[available++] = '0' + this->bban[i] - 'K';
+
4899 }
+
4900 else if ('U' <= this->bban[i] && this->bban[i] <= 'Z') {
+
4901 normalized[available++] = '3';
+
4902 normalized[available++] = '0' + this->bban[i] - 'U';
+
4903 }
+
4904 }
+
4905
+
4906 // Calculate modulo 97.
+
4907 nominator = stdex::strtou32(normalized, 9, &next, 10);
+
4908 for (;;) {
+
4909 nominator %= 97;
+
4910 if (!normalized[next]) {
+
4911 this->is_valid = nominator == 1;
+
4912 break;
+
4913 }
+
4914 size_t digit_count = nominator == 0 ? 0 : nominator < 10 ? 1 : 2;
+
4915 for (; digit_count < 9 && normalized[next]; ++next, ++digit_count)
+
4916 nominator = nominator * 10 + (normalized[next] - '0');
+
4917 }
+
4918
+
4919 this->interval.start = start;
+
4920 return true;
+
4921
+
4922 error:
+
4923 this->country[0] = 0;
+
4924 this->check_digits[0] = 0;
+
4925 this->bban[0] = 0;
+
4926 this->is_valid = false;
+
4927 this->interval.invalidate();
+
4928 return false;
+
4929 }
+
4930
+
4931 virtual void invalidate()
+
4932 {
+
4933 this->country[0] = 0;
+
4934 this->check_digits[0] = 0;
+
4935 this->bban[0] = 0;
+
4936 this->is_valid = false;
+ +
4938 }
+
4939
+
4940 public:
+
4941 T country[3];
+ +
4943 T bban[31];
+ +
4945
+
4946 protected:
+
4947 std::shared_ptr<basic_parser<T>> m_space;
+
4948 };
-
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 };
+
4949
+
4950 using iban = basic_iban<char>;
+
4951 using wiban = basic_iban<wchar_t>;
+
4952#ifdef _UNICODE
+
4953 using tiban = wiban;
+
4954#else
+
4955 using tiban = iban;
+
4956#endif
+ +
4958
+
4964 template <class T>
+
+ +
4966 {
+
4967 public:
+ +
4969 _In_ const std::shared_ptr<basic_parser<T>>& space,
+
4970 _In_ const std::locale& locale = std::locale()) :
+
4971 basic_parser<T>(locale),
+
4972 m_space(space)
+
4973 {
+
4974 this->check_digits[0] = 0;
+
4975 this->reference[0] = 0;
+
4976 this->is_valid = false;
+
4977 }
+
4978
+
4979 virtual bool match(
+
4980 _In_reads_or_z_(end) const T* text,
+
4981 _In_ size_t start = 0,
+
4982 _In_ size_t end = SIZE_MAX,
+
4983 _In_ int flags = match_default)
+
4984 {
+
4985 _Assume_(text || start >= end);
+
4986 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
+
4987 const bool case_insensitive = flags & match_case_insensitive ? true : false;
+
4988 size_t n, available, next;
+ +
4990
+
4991 this->interval.end = start;
+
4992 if (this->interval.end + 1 >= end ||
+
4993 (case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end]) != 'R' ||
+
4994 (case_insensitive ? ctype.toupper(text[this->interval.end + 1]) : text[this->interval.end + 1]) != 'F')
+
4995 goto error; // incomplete or wrong reference ID
+
4996 this->interval.end += 2;
+
4997
+
4998 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
+
4999 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
+
5000 goto error; // incomplete or invalid check digits
+
5001 this->check_digits[i] = text[this->interval.end];
+
5002 }
+
5003 this->check_digits[2] = 0;
+
5004
+
5005 for (n = 0;;) {
+
5006 if (m_space && m_space->match(text, this->interval.end, end, flags))
+
5007 this->interval.end = m_space->interval.end;
+
5008 for (size_t j = 0; j < 4; ++j) {
+
5009 if (this->interval.end >= end || !text[this->interval.end])
+
5010 goto out;
+
5011 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
+
5012 if (('0' <= chr && chr <= '9') || ('A' <= chr && chr <= 'Z')) {
+
5013 if (n >= _countof(reference) - 1)
+
5014 goto error; // reference overflow
+
5015 this->reference[n++] = chr;
+
5016 this->interval.end++;
+
5017 }
+
5018 else
+
5019 goto out;
+
5020 }
+
5021 }
+
5022 out:
+
5023 if (!n)
+
5024 goto error; // reference too short
+
5025 this->reference[_countof(this->reference) - 1] = 0;
+
5026 for (size_t i = n, j = _countof(this->reference) - 1; i;)
+
5027 this->reference[--j] = this->reference[--i];
+
5028 for (size_t j = _countof(this->reference) - 1 - n; j;)
+
5029 this->reference[--j] = '0';
+
5030
+
5031 // Normalize creditor reference.
+
5032 T normalized[47];
+
5033 available = 0;
+
5034 for (size_t i = 0; ; ++i) {
+
5035 if (!this->reference[i]) {
+
5036 normalized[available++] = '2'; // R
+
5037 normalized[available++] = '7';
+
5038 normalized[available++] = '1'; // F
+
5039 normalized[available++] = '5';
+
5040 normalized[available++] = this->check_digits[0];
+
5041 normalized[available++] = this->check_digits[1];
+
5042 normalized[available] = 0;
+
5043 break;
+
5044 }
+
5045 if ('0' <= this->reference[i] && this->reference[i] <= '9')
+
5046 normalized[available++] = this->reference[i];
+
5047 else if ('A' <= this->reference[i] && this->reference[i] <= 'J') {
+
5048 normalized[available++] = '1';
+
5049 normalized[available++] = '0' + this->reference[i] - 'A';
+
5050 }
+
5051 else if ('K' <= this->reference[i] && this->reference[i] <= 'T') {
+
5052 normalized[available++] = '2';
+
5053 normalized[available++] = '0' + this->reference[i] - 'K';
+
5054 }
+
5055 else if ('U' <= this->reference[i] && this->reference[i] <= 'Z') {
+
5056 normalized[available++] = '3';
+
5057 normalized[available++] = '0' + this->reference[i] - 'U';
+
5058 }
+
5059 }
+
5060
+
5061 // Calculate modulo 97.
+
5062 nominator = stdex::strtou32(normalized, 9, &next, 10);
+
5063 for (;;) {
+
5064 nominator %= 97;
+
5065 if (!normalized[next]) {
+
5066 this->is_valid = nominator == 1;
+
5067 break;
+
5068 }
+
5069 size_t digit_count = nominator == 0 ? 0 : nominator < 10 ? 1 : 2;
+
5070 for (; digit_count < 9 && normalized[next]; ++next, ++digit_count)
+
5071 nominator = nominator * 10 + (normalized[next] - '0');
+
5072 }
+
5073
+
5074 this->interval.start = start;
+
5075 return true;
+
5076
+
5077 error:
+
5078 this->check_digits[0] = 0;
+
5079 this->reference[0] = 0;
+
5080 this->is_valid = false;
+
5081 this->interval.invalidate();
+
5082 return false;
+
5083 }
+
5084
+
5085 virtual void invalidate()
+
5086 {
+
5087 this->check_digits[0] = 0;
+
5088 this->reference[0] = 0;
+
5089 this->is_valid = false;
+ +
5091 }
+
5092
+
5093 public:
+ + + +
5097
+
5098 protected:
+
5099 std::shared_ptr<basic_parser<T>> m_space;
+
5100 };
-
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 };
+
5101
+ + +
5104#ifdef _UNICODE
+ +
5106#else
+ +
5108#endif
+ +
5110
+
5116 template <class T>
+
+ +
5118 {
+
5119 public:
+
5120 basic_si_reference_part(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
+
5121
+
5122 virtual bool match(
+
5123 _In_reads_or_z_(end) const T* text,
+
5124 _In_ size_t start = 0,
+
5125 _In_ size_t end = SIZE_MAX,
+
5126 _In_ int flags = match_default)
+
5127 {
+
5128 _Assume_(text || start >= end);
+
5129 this->interval.end = start;
+
5130 for (;;) {
+
5131 if (this->interval.end >= end || !text[this->interval.end])
+
5132 break;
+
5133 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9')
+
5134 this->interval.end++;
+
5135 else
+
5136 break;
+
5137 }
+ +
5139 this->interval.start = start;
+
5140 return true;
+
5141 }
+
5142 this->interval.invalidate();
+
5143 return false;
+
5144 }
+
5145 };
-
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 };
+
5146
+ + +
5149#ifdef _UNICODE
+ +
5151#else
+ +
5153#endif
+ +
5155
+
5161 template <class T>
+
+ +
5163 {
+
5164 public:
+
5165 basic_si_reference_delimiter(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
+
5166
+
5167 virtual bool match(
+
5168 _In_reads_or_z_(end) const T* text,
+
5169 _In_ size_t start = 0,
+
5170 _In_ size_t end = SIZE_MAX,
+
5171 _In_ int flags = match_default)
+
5172 {
+
5173 _Assume_(text || start >= end);
+
5174 if (start < end && text[start] == '-') {
+
5175 this->interval.end = (this->interval.start = start) + 1;
+
5176 return true;
+
5177 }
+
5178 this->interval.invalidate();
+
5179 return false;
+
5180 }
+
5181 };
-
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 };
+
5182
+ + +
5185#ifdef _UNICODE
+ +
5187#else
+ +
5189#endif
+ +
5191
+
5199 template <class T>
+
+ +
5201 {
+
5202 public:
+ +
5204 _In_ const std::shared_ptr<basic_parser<T>>& space,
+
5205 _In_ const std::locale& locale = std::locale()) :
+
5206 basic_parser<T>(locale),
+
5207 part1(locale),
+
5208 part2(locale),
+
5209 part3(locale),
+
5210 is_valid(false),
+
5211 m_space(space),
+
5212 m_delimiter(locale)
+
5213 {
+
5214 this->model[0] = 0;
+
5215 }
+
5216
+
5217 virtual bool match(
+
5218 _In_reads_or_z_(end) const T* text,
+
5219 _In_ size_t start = 0,
+
5220 _In_ size_t end = SIZE_MAX,
+
5221 _In_ int flags = match_default)
+
5222 {
+
5223 _Assume_(text || start >= end);
+
5224 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
+
5225 const bool case_insensitive = flags & match_case_insensitive ? true : false;
+
5226
+
5227 this->interval.end = start;
+
5228 if (this->interval.end + 1 >= end ||
+
5229 (case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end]) != 'S' ||
+
5230 (case_insensitive ? ctype.toupper(text[this->interval.end + 1]) : text[this->interval.end + 1]) != 'I')
+
5231 goto error; // incomplete or wrong reference ID
+
5232 this->interval.end += 2;
+
5233
+
5234 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
+
5235 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
+
5236 goto error; // incomplete or invalid model
+
5237 this->model[i] = text[this->interval.end];
+
5238 }
+
5239 this->model[2] = 0;
+
5240
+
5241 this->part1.invalidate();
+
5242 this->part2.invalidate();
+
5243 this->part3.invalidate();
+
5244 if (this->model[0] == '9' && this->model[1] == '9') {
+
5245 is_valid = true;
+
5246 this->interval.start = start;
+
5247 return true;
+
5248 }
+
5249
+
5250 if (m_space && m_space->match(text, this->interval.end, end, flags))
+
5251 this->interval.end = m_space->interval.end;
+
5252
+
5253 this->part1.match(text, this->interval.end, end, flags) &&
+
5254 this->m_delimiter.match(text, this->part1.interval.end, end, flags) &&
+
5255 this->part2.match(text, this->m_delimiter.interval.end, end, flags) &&
+
5256 this->m_delimiter.match(text, this->part2.interval.end, end, flags) &&
+
5257 this->part3.match(text, this->m_delimiter.interval.end, end, flags);
+
5258
+
5259 this->interval.start = start;
+
5260 if (this->part3.interval)
+
5261 this->interval.end = this->part3.interval.end;
+
5262 else if (this->part2.interval)
+
5263 this->interval.end = this->part2.interval.end;
+
5264 else if (this->part1.interval)
+
5265 this->interval.end = this->part1.interval.end;
+
5266 else
+
5267 this->interval.end = start + 4;
+
5268
+
5269 if (this->model[0] == '0' && this->model[1] == '0')
+
5270 is_valid =
+
5271 this->part3.interval ?
+
5272 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5273 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 :
+
5274 this->part2.interval ?
+
5275 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5276 this->part1.interval.size() + this->part2.interval.size() <= 20 :
+
5277 this->part1.interval ?
+
5278 this->part1.interval.size() <= 12 :
+
5279 false;
+
5280 else if (this->model[0] == '0' && this->model[1] == '1')
+
5281 is_valid =
+
5282 this->part3.interval ?
+
5283 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5284 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5285 check11(
+
5286 text + this->part1.interval.start, this->part1.interval.size(),
+
5287 text + this->part2.interval.start, this->part2.interval.size(),
+
5288 text + this->part3.interval.start, this->part3.interval.size()) :
+
5289 this->part2.interval ?
+
5290 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5291 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
+
5292 check11(
+
5293 text + this->part1.interval.start, this->part1.interval.size(),
+
5294 text + this->part2.interval.start, this->part2.interval.size()) :
+
5295 this->part1.interval ?
+
5296 this->part1.interval.size() <= 12 &&
+
5297 check11(text + this->part1.interval.start, this->part1.interval.size()) :
+
5298 false;
+
5299 else if (this->model[0] == '0' && this->model[1] == '2')
+
5300 is_valid =
+
5301 this->part3.interval ?
+
5302 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5303 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5304 check11(text + this->part2.interval.start, this->part2.interval.size()) &&
+
5305 check11(text + this->part3.interval.start, this->part3.interval.size()) :
+
5306 false;
+
5307 else if (this->model[0] == '0' && this->model[1] == '3')
+
5308 is_valid =
+
5309 this->part3.interval ?
+
5310 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5311 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5312 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
+
5313 check11(text + this->part2.interval.start, this->part2.interval.size()) &&
+
5314 check11(text + this->part3.interval.start, this->part3.interval.size()) :
+
5315 false;
+
5316 else if (this->model[0] == '0' && this->model[1] == '4')
+
5317 is_valid =
+
5318 this->part3.interval ?
+
5319 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5320 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5321 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
+
5322 check11(text + this->part3.interval.start, this->part3.interval.size()) :
+
5323 false;
+
5324 else if ((this->model[0] == '0' || this->model[0] == '5') && this->model[1] == '5')
+
5325 is_valid =
+
5326 this->part3.interval ?
+
5327 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5328 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5329 check11(text + this->part1.interval.start, this->part1.interval.size()) :
+
5330 this->part2.interval ?
+
5331 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5332 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
+
5333 check11(text + this->part1.interval.start, this->part1.interval.size()) :
+
5334 this->part1.interval ?
+
5335 this->part1.interval.size() <= 12 &&
+
5336 check11(text + this->part1.interval.start, this->part1.interval.size()) :
+
5337 false;
+
5338 else if (this->model[0] == '0' && this->model[1] == '6')
+
5339 is_valid =
+
5340 this->part3.interval ?
+
5341 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5342 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5343 check11(
+
5344 text + this->part2.interval.start, this->part2.interval.size(),
+
5345 text + this->part3.interval.start, this->part3.interval.size()) :
+
5346 this->part2.interval ?
+
5347 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5348 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
+
5349 check11(text + this->part2.interval.start, this->part2.interval.size()) :
+
5350 false;
+
5351 else if (this->model[0] == '0' && this->model[1] == '7')
+
5352 is_valid =
+
5353 this->part3.interval ?
+
5354 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5355 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5356 check11(text + this->part2.interval.start, this->part2.interval.size()) :
+
5357 this->part2.interval ?
+
5358 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5359 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
+
5360 check11(text + this->part2.interval.start, this->part2.interval.size()) :
+
5361 false;
+
5362 else if (this->model[0] == '0' && this->model[1] == '8')
+
5363 is_valid =
+
5364 this->part3.interval ?
+
5365 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5366 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5367 check11(
+
5368 text + this->part1.interval.start, this->part1.interval.size(),
+
5369 text + this->part2.interval.start, this->part2.interval.size()) &&
+
5370 check11(text + this->part3.interval.start, this->part3.interval.size()) :
+
5371 false;
+
5372 else if (this->model[0] == '0' && this->model[1] == '9')
+
5373 is_valid =
+
5374 this->part3.interval ?
+
5375 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5376 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5377 check11(
+
5378 text + this->part1.interval.start, this->part1.interval.size(),
+
5379 text + this->part2.interval.start, this->part2.interval.size()) :
+
5380 this->part2.interval ?
+
5381 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5382 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
+
5383 check11(
+
5384 text + this->part1.interval.start, this->part1.interval.size(),
+
5385 text + this->part2.interval.start, this->part2.interval.size()) :
+
5386 this->part1.interval ?
+
5387 this->part1.interval.size() <= 12 &&
+
5388 check11(text + this->part1.interval.start, this->part1.interval.size()) :
+
5389 false;
+
5390 else if (this->model[0] == '1' && this->model[1] == '0')
+
5391 is_valid =
+
5392 this->part3.interval ?
+
5393 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5394 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5395 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
+
5396 check11(
+
5397 text + this->part2.interval.start, this->part2.interval.size(),
+
5398 text + this->part3.interval.start, this->part3.interval.size()) :
+
5399 this->part2.interval ?
+
5400 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5401 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
+
5402 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
+
5403 check11(text + this->part2.interval.start, this->part2.interval.size()) :
+
5404 false;
+
5405 else if (
+
5406 (this->model[0] == '1' && (this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
+
5407 ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '8') ||
+
5408 (this->model[0] == '4' && (this->model[1] == '0' || this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
+
5409 (this->model[0] == '5' && (this->model[1] == '1' || this->model[1] == '8')))
+
5410 is_valid =
+
5411 this->part3.interval ?
+
5412 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
+
5413 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
+
5414 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
+
5415 check11(text + this->part2.interval.start, this->part2.interval.size()) :
+
5416 this->part2.interval ?
+
5417 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5418 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
+
5419 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
+
5420 check11(text + this->part2.interval.start, this->part2.interval.size()) :
+
5421 false;
+
5422 else if (this->model[0] == '1' && this->model[1] == '2')
+
5423 is_valid =
+
5424 this->part3.interval ? false :
+
5425 this->part2.interval ? false :
+
5426 this->part1.interval ?
+
5427 this->part1.interval.size() <= 13 &&
+
5428 check11(text + this->part1.interval.start, this->part1.interval.size()) :
+
5429 false;
+
5430 else if ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '1')
+
5431 is_valid =
+
5432 this->part3.interval ? false :
+
5433 this->part2.interval ?
+
5434 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
+
5435 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
+
5436 check11(text + this->part1.interval.start, this->part1.interval.size()) :
+
5437 false;
+
5438 else
+
5439 is_valid = true; // Assume models we don't handle as valid
+
5440 return true;
+
5441
+
5442 error:
+
5443 this->model[0] = 0;
+
5444 this->part1.interval.start = (this->part1.interval.end = start) + 1;
+
5445 this->part2.interval.start = (this->part2.interval.end = start) + 1;
+
5446 this->part3.interval.start = (this->part3.interval.end = start) + 1;
+
5447 this->is_valid = false;
+
5448 this->interval.invalidate();
+
5449 return false;
+
5450 }
+
5451
+
5452 virtual void invalidate()
+
5453 {
+
5454 this->model[0] = 0;
+
5455 this->part1.invalidate();
+
5456 this->part2.invalidate();
+
5457 this->part3.invalidate();
+
5458 this->is_valid = false;
+ +
5460 }
+
5461
+
5462 protected:
+
5463 static bool check11(
+
5464 _In_count_(num_part1) const T* part1, _In_ size_t num_part1)
+
5465 {
+
5466 _Assume_(part1 && num_part1 >= 1);
+
5467 uint32_t nominator = 0, ponder = 2;
+
5468 for (size_t i = num_part1 - 1; i--; ++ponder)
+
5469 nominator += (part1[i] - '0') * ponder;
+
5470 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
+
5471 if (control >= 10)
+
5472 control = 0;
+
5473 return control == part1[num_part1 - 1] - '0';
+
5474 }
+
5475
+
5476 static bool check11(
+
5477 _In_count_(num_part1) const T* part1, _In_ size_t num_part1,
+
5478 _In_count_(num_part2) const T* part2, _In_ size_t num_part2)
+
5479 {
+
5480 _Assume_(part1 || !num_part1);
+
5481 _Assume_(part2 && num_part2 >= 1);
+
5482 uint32_t nominator = 0, ponder = 2;
+
5483 for (size_t i = num_part2 - 1; i--; ++ponder)
+
5484 nominator += (part2[i] - '0') * ponder;
+
5485 for (size_t i = num_part1; i--; ++ponder)
+
5486 nominator += (part1[i] - '0') * ponder;
+
5487 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
+
5488 if (control == 10)
+
5489 control = 0;
+
5490 return control == part2[num_part2 - 1] - '0';
+
5491 }
+
5492
+
5493 static bool check11(
+
5494 _In_count_(num_part1) const T* part1, _In_ size_t num_part1,
+
5495 _In_count_(num_part2) const T* part2, _In_ size_t num_part2,
+
5496 _In_count_(num_part3) const T* part3, _In_ size_t num_part3)
+
5497 {
+
5498 _Assume_(part1 || !num_part1);
+
5499 _Assume_(part2 || !num_part2);
+
5500 _Assume_(part3 && num_part3 >= 1);
+
5501 uint32_t nominator = 0, ponder = 2;
+
5502 for (size_t i = num_part3 - 1; i--; ++ponder)
+
5503 nominator += (part3[i] - '0') * ponder;
+
5504 for (size_t i = num_part2; i--; ++ponder)
+
5505 nominator += (part2[i] - '0') * ponder;
+
5506 for (size_t i = num_part1; i--; ++ponder)
+
5507 nominator += (part1[i] - '0') * ponder;
+
5508 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
+
5509 if (control == 10)
+
5510 control = 0;
+
5511 return control == part2[num_part3 - 1] - '0';
+
5512 }
+
5513
+
5514 public:
+
5515 T model[3];
+ + + + +
5520
+
5521 protected:
+
5522 std::shared_ptr<basic_parser<T>> m_space;
+ +
5524 };
-
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 };
+
5525
+ + +
5528#ifdef _UNICODE
+ +
5530#else
+ +
5532#endif
+ +
5534
+
5538 template <class T>
+
+ +
5540 {
+
5541 public:
+ +
5543 _In_ const std::shared_ptr<basic_parser<T>>& element,
+
5544 _In_ const std::shared_ptr<basic_parser<T>>& digit,
+
5545 _In_ const std::shared_ptr<basic_parser<T>>& sign,
+
5546 _In_ const std::locale& locale = std::locale()) :
+
5547 basic_parser<T>(locale),
+
5548 m_element(element),
+
5549 m_digit(digit),
+
5550 m_sign(sign),
+
5551 has_digits(false),
+
5552 has_charge(false)
+
5553 {}
+
5554
+
5555 virtual bool match(
+
5556 _In_reads_or_z_(end) const T* text,
+
5557 _In_ size_t start = 0,
+
5558 _In_ size_t end = SIZE_MAX,
+
5559 _In_ int flags = match_default)
+
5560 {
+
5561 _Assume_(text || start >= end);
+
5562
+
5563 has_digits = false;
+
5564 has_charge = false;
+
5565 this->interval.end = start;
+
5566
+
5567 const int element_match_flags = flags & ~match_case_insensitive; // Chemical elements are always case-sensitive.
+
5568 for (;;) {
+
5569 if (m_element->match(text, this->interval.end, end, element_match_flags)) {
+
5570 this->interval.end = m_element->interval.end;
+
5571 while (m_digit->match(text, this->interval.end, end, flags)) {
+
5572 this->interval.end = m_digit->interval.end;
+
5573 has_digits = true;
+
5574 }
+
5575 }
+
5576 else if (start < this->interval.end) {
+
5577 if (m_sign->match(text, this->interval.end, end, flags)) {
+
5578 this->interval.end = m_sign->interval.end;
+
5579 has_charge = true;
+
5580 }
+
5581 this->interval.start = start;
+
5582 return true;
+
5583 }
+
5584 else {
+
5585 this->interval.invalidate();
+
5586 return false;
+
5587 }
+
5588 }
+
5589 }
+
5590
+
5591 virtual void invalidate()
+
5592 {
+
5593 has_digits = false;
+
5594 has_charge = false;
+ +
5596 }
+
5597
+
5598 public:
+
5599 bool has_digits;
+
5600 bool has_charge;
+
5601
+
5602 protected:
+
5603 std::shared_ptr<basic_parser<T>> m_element;
+
5604 std::shared_ptr<basic_parser<T>> m_digit;
+
5605 std::shared_ptr<basic_parser<T>> m_sign;
+
5606 };
-
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 };
+
5607
+ + +
5610#ifdef _UNICODE
+ +
5612#else
+ +
5614#endif
+ +
5616
+
+ +
5621 {
+
5622 public:
+
5623 virtual bool match(
+
5624 _In_reads_or_z_(end) const char* text,
+
5625 _In_ size_t start = 0,
+
5626 _In_ size_t end = SIZE_MAX,
+
5627 _In_ int flags = match_default)
+
5628 {
+
5629 _Assume_(text || start >= end);
+
5630 this->interval.end = start;
+
5631
+
5632 _Assume_(text || this->interval.end >= end);
+
5633 if (this->interval.end < end && text[this->interval.end]) {
+
5634 if (text[this->interval.end] == '\r') {
+
5635 this->interval.end++;
+
5636 if (this->interval.end < end && text[this->interval.end] == '\n') {
+
5637 this->interval.start = start;
+
5638 this->interval.end++;
+
5639 return true;
+
5640 }
+
5641 }
+
5642 else if (text[this->interval.end] == '\n') {
+
5643 this->interval.start = start;
+
5644 this->interval.end++;
+
5645 return true;
+
5646 }
+
5647 }
+
5648 this->interval.invalidate();
+
5649 return false;
+
5650 }
+
5651 };
-
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 };
+
5652
+
+
5656 class http_space : public parser
+
5657 {
+
5658 public:
+
5659 virtual bool match(
+
5660 _In_reads_or_z_(end) const char* text,
+
5661 _In_ size_t start = 0,
+
5662 _In_ size_t end = SIZE_MAX,
+
5663 _In_ int flags = match_default)
+
5664 {
+
5665 _Assume_(text || start >= end);
+
5666 this->interval.end = start;
+
5667 if (m_line_break.match(text, this->interval.end, end, flags)) {
+
5668 this->interval.end = m_line_break.interval.end;
+
5669 if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
+
5670 this->interval.start = start;
+
5671 this->interval.end++;
+
5672 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
5673 return true;
+
5674 }
+
5675 }
+
5676 else if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
+
5677 this->interval.start = start;
+
5678 this->interval.end++;
+
5679 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
5680 return true;
+
5681 }
+
5682 this->interval.invalidate();
+
5683 return false;
+
5684 }
+
5685
+
5686 protected:
+
5687 http_line_break m_line_break;
+
5688 };
-
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 };
+
5689
+
+
5693 class http_text_char : public parser
+
5694 {
+
5695 public:
+
5696 virtual bool match(
+
5697 _In_reads_or_z_(end) const char* text,
+
5698 _In_ size_t start = 0,
+
5699 _In_ size_t end = SIZE_MAX,
+
5700 _In_ int flags = match_default)
+
5701 {
+
5702 _Assume_(text || start >= end);
+
5703 this->interval.end = start;
+
5704
+
5705 _Assume_(text || this->interval.end >= end);
+
5706 if (m_space.match(text, this->interval.end, end, flags)) {
+
5707 this->interval.start = start;
+
5708 this->interval.end = m_space.interval.end;
+
5709 return true;
+
5710 }
+
5711 else if (this->interval.end < end && text[this->interval.end] && text[this->interval.end] >= 0x20) {
+
5712 this->interval.start = start;
+
5713 this->interval.end++;
+
5714 return true;
+
5715 }
+
5716 this->interval.invalidate();
+
5717 return false;
+
5718 }
+
5719
+
5720 protected:
+
5721 http_space m_space;
+
5722 };
-
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 };
+
5723
+
+
5727 class http_token : public parser
+
5728 {
+
5729 public:
+
5730 virtual bool match(
+
5731 _In_reads_or_z_(end) const char* text,
+
5732 _In_ size_t start = 0,
+
5733 _In_ size_t end = SIZE_MAX,
+
5734 _In_ int flags = match_default)
+
5735 {
+
5736 _Assume_(text || start >= end);
+
5737 this->interval.end = start;
+
5738 for (;;) {
+
5739 if (this->interval.end < end && text[this->interval.end]) {
+
5740 if ((unsigned int)text[this->interval.end] < 0x20 ||
+
5741 (unsigned int)text[this->interval.end] == 0x7f ||
+
5742 text[this->interval.end] == '(' ||
+
5743 text[this->interval.end] == ')' ||
+
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 isspace(text[this->interval.end]))
+
5760 break;
+
5761 else
+
5762 this->interval.end++;
+
5763 }
+
5764 else
+
5765 break;
+
5766 }
+ +
5768 this->interval.start = start;
+
5769 return true;
+
5770 }
+
5771 else {
+
5772 this->interval.invalidate();
+
5773 return false;
+
5774 }
+
5775 }
+
5776 };
-
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 };
+
5777
+
+ +
5782 {
+
5783 public:
+
5784 virtual bool match(
+
5785 _In_reads_or_z_(end) const char* text,
+
5786 _In_ size_t start = 0,
+
5787 _In_ size_t end = SIZE_MAX,
+
5788 _In_ int flags = match_default)
+
5789 {
+
5790 _Assume_(text || start >= end);
+
5791 this->interval.end = start;
+
5792 if (this->interval.end < end && text[this->interval.end] != '"')
+
5793 goto error;
+
5794 this->interval.end++;
+
5795 content.start = this->interval.end;
+
5796 for (;;) {
+
5797 _Assume_(text || this->interval.end >= end);
+
5798 if (this->interval.end < end && text[this->interval.end]) {
+
5799 if (text[this->interval.end] == '"') {
+
5800 content.end = this->interval.end;
+
5801 this->interval.end++;
+
5802 break;
+
5803 }
+
5804 else if (text[this->interval.end] == '\\') {
+
5805 this->interval.end++;
+
5806 if (this->interval.end < end && text[this->interval.end]) {
+
5807 this->interval.end++;
+
5808 }
+
5809 else
+
5810 goto error;
+
5811 }
+
5812 else if (m_chr.match(text, this->interval.end, end, flags))
+
5813 this->interval.end++;
+
5814 else
+
5815 goto error;
+
5816 }
+
5817 else
+
5818 goto error;
+
5819 }
+
5820 this->interval.start = start;
+
5821 return true;
+
5822
+
5823 error:
+
5824 content.start = 1;
+
5825 content.end = 0;
+
5826 this->interval.invalidate();
+
5827 return false;
+
5828 }
+
5829
+
5830 virtual void invalidate()
+
5831 {
+
5832 content.start = 1;
+
5833 content.end = 0;
+
5834 parser::invalidate();
+
5835 }
+
5836
+
5837 public:
+ +
5839
+
5840 protected:
+
5841 http_text_char m_chr;
+
5842 };
-
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 };
+
5843
+
+
5847 class http_value : public parser
+
5848 {
+
5849 public:
+
5850 virtual bool match(
+
5851 _In_reads_or_z_(end) const char* text,
+
5852 _In_ size_t start = 0,
+
5853 _In_ size_t end = SIZE_MAX,
+
5854 _In_ int flags = match_default)
+
5855 {
+
5856 _Assume_(text || start >= end);
+
5857 this->interval.end = start;
+
5858 if (string.match(text, this->interval.end, end, flags)) {
+
5859 token.invalidate();
+
5860 this->interval.end = string.interval.end;
+
5861 this->interval.start = start;
+
5862 return true;
+
5863 }
+
5864 else if (token.match(text, this->interval.end, end, flags)) {
+
5865 string.invalidate();
+
5866 this->interval.end = token.interval.end;
+
5867 this->interval.start = start;
+
5868 return true;
+
5869 }
+
5870 else {
+
5871 this->interval.invalidate();
+
5872 return false;
+
5873 }
+
5874 }
+
5875
+
5876 virtual void invalidate()
+
5877 {
+
5878 string.invalidate();
+
5879 token.invalidate();
+
5880 parser::invalidate();
+
5881 }
+
5882
+
5883 public:
+ + +
5886 };
-
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 };
+
5887
+
+
5891 class http_parameter : public parser
+
5892 {
+
5893 public:
+
5894 virtual bool match(
+
5895 _In_reads_or_z_(end) const char* text,
+
5896 _In_ size_t start = 0,
+
5897 _In_ size_t end = SIZE_MAX,
+
5898 _In_ int flags = match_default)
+
5899 {
+
5900 _Assume_(text || start >= end);
+
5901 this->interval.end = start;
+
5902 if (name.match(text, this->interval.end, end, flags))
+
5903 this->interval.end = name.interval.end;
+
5904 else
+
5905 goto error;
+
5906 while (m_space.match(text, this->interval.end, end, flags))
+
5907 this->interval.end = m_space.interval.end;
+
5908 _Assume_(text || this->interval.end >= end);
+
5909 if (this->interval.end < end && text[this->interval.end] == '=')
+
5910 this->interval.end++;
+
5911 else
+
5912 while (m_space.match(text, this->interval.end, end, flags))
+
5913 this->interval.end = m_space.interval.end;
+
5914 if (value.match(text, this->interval.end, end, flags))
+
5915 this->interval.end = value.interval.end;
+
5916 else
+
5917 goto error;
+
5918 this->interval.start = start;
+
5919 return true;
+
5920
+
5921 error:
+
5922 name.invalidate();
+
5923 value.invalidate();
+
5924 this->interval.invalidate();
+
5925 return false;
+
5926 }
+
5927
+
5928 virtual void invalidate()
+
5929 {
+
5930 name.invalidate();
+
5931 value.invalidate();
+
5932 parser::invalidate();
+
5933 }
+
5934
+
5935 public:
+ + +
5938
+
5939 protected:
+
5940 http_space m_space;
+
5941 };
-
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 };
+
5942
+
+
5946 class http_any_type : public parser
+
5947 {
+
5948 public:
+
5949 virtual bool match(
+
5950 _In_reads_or_z_(end) const char* text,
+
5951 _In_ size_t start = 0,
+
5952 _In_ size_t end = SIZE_MAX,
+
5953 _In_ int flags = match_default)
+
5954 {
+
5955 _Assume_(text || start >= end);
+
5956 if (start + 2 < end &&
+
5957 text[start] == '*' &&
+
5958 text[start + 1] == '/' &&
+
5959 text[start + 2] == '*')
+
5960 {
+
5961 this->interval.end = (this->interval.start = start) + 3;
+
5962 return true;
+
5963 }
+
5964 else if (start < end && text[start] == '*') {
+
5965 this->interval.end = (this->interval.start = start) + 1;
+
5966 return true;
+
5967 }
+
5968 else {
+
5969 this->interval.invalidate();
+
5970 return false;
+
5971 }
+
5972 }
+
5973 };
-
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 };
+
5974
+
+ +
5979 {
+
5980 public:
+
5981 virtual bool match(
+
5982 _In_reads_or_z_(end) const char* text,
+
5983 _In_ size_t start = 0,
+
5984 _In_ size_t end = SIZE_MAX,
+
5985 _In_ int flags = match_default)
+
5986 {
+
5987 _Assume_(text || start >= end);
+
5988 this->interval.end = start;
+
5989 if (type.match(text, this->interval.end, end, flags))
+
5990 this->interval.end = type.interval.end;
+
5991 else
+
5992 goto error;
+
5993 while (m_space.match(text, this->interval.end, end, flags))
+
5994 this->interval.end = m_space.interval.end;
+
5995 if (this->interval.end < end && text[this->interval.end] == '/')
+
5996 this->interval.end++;
+
5997 else
+
5998 goto error;
+
5999 while (m_space.match(text, this->interval.end, end, flags))
+
6000 this->interval.end = m_space.interval.end;
+
6001 if (subtype.match(text, this->interval.end, end, flags))
+
6002 this->interval.end = subtype.interval.end;
+
6003 else
+
6004 goto error;
+
6005 this->interval.start = start;
+
6006 return true;
+
6007
+
6008 error:
+
6009 type.invalidate();
+
6010 subtype.invalidate();
+
6011 this->interval.invalidate();
+
6012 return false;
+
6013 }
+
6014
+
6015 virtual void invalidate()
+
6016 {
+
6017 type.invalidate();
+
6018 subtype.invalidate();
+
6019 parser::invalidate();
+
6020 }
+
6021
+
6022 public:
+
6023 http_token type;
+
6024 http_token subtype;
+
6025
+
6026 protected:
+
6027 http_space m_space;
+
6028 };
-
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 };
+
6029
+
+ +
6034 {
+
6035 public:
+
6036 virtual bool match(
+
6037 _In_reads_or_z_(end) const char* text,
+
6038 _In_ size_t start = 0,
+
6039 _In_ size_t end = SIZE_MAX,
+
6040 _In_ int flags = match_default)
+
6041 {
+
6042 _Assume_(text || start >= end);
+
6043 if (!http_media_range::match(text, start, end, flags))
+
6044 goto error;
+
6045 params.clear();
+
6046 for (;;) {
+
6047 if (this->interval.end < end && text[this->interval.end]) {
+
6048 if (m_space.match(text, this->interval.end, end, flags))
+
6049 this->interval.end = m_space.interval.end;
+
6050 else if (text[this->interval.end] == ';') {
+
6051 this->interval.end++;
+
6052 while (m_space.match(text, this->interval.end, end, flags))
+
6053 this->interval.end = m_space.interval.end;
+
6054 http_parameter param;
+
6055 if (param.match(text, this->interval.end, end, flags)) {
+
6056 this->interval.end = param.interval.end;
+
6057 params.push_back(std::move(param));
+
6058 }
+
6059 else
+
6060 break;
+
6061 }
+
6062 else
+
6063 break;
+
6064 }
+
6065 else
+
6066 break;
+
6067 }
+
6068 this->interval.end = params.empty() ? subtype.interval.end : params.back().interval.end;
+
6069 return true;
+
6070
+
6071 error:
+
6072 http_media_range::invalidate();
+
6073 params.clear();
+
6074 this->interval.invalidate();
+
6075 return false;
+
6076 }
+
6077
+
6078 virtual void invalidate()
+
6079 {
+
6080 params.clear();
+
6081 http_media_range::invalidate();
+
6082 }
+
6083
+
6084 public:
+
6085 std::list<http_parameter> params;
+
6086 };
-
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 };
+
6087
+
+ +
6092 {
+
6093 public:
+
6094 virtual bool match(
+
6095 _In_reads_or_z_(end) const char* text,
+
6096 _In_ size_t start = 0,
+
6097 _In_ size_t end = SIZE_MAX,
+
6098 _In_ int flags = match_default)
+
6099 {
+
6100 _Assume_(text || start >= end);
+
6101 this->interval.end = start;
+
6102 for (;;) {
+
6103 if (this->interval.end < end && text[this->interval.end]) {
+
6104 if ((unsigned int)text[this->interval.end] < 0x20 ||
+
6105 (unsigned int)text[this->interval.end] == 0x7f ||
+
6106 text[this->interval.end] == ':' ||
+
6107 text[this->interval.end] == '/' ||
+
6108 isspace(text[this->interval.end]))
+
6109 break;
+
6110 else
+
6111 this->interval.end++;
+
6112 }
+
6113 else
+
6114 break;
+
6115 }
+ +
6117 this->interval.start = start;
+
6118 return true;
+
6119 }
+
6120 this->interval.invalidate();
+
6121 return false;
+
6122 }
+
6123 };
-
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 };
+
6124
+
+
6128 class http_url_port : public parser
+
6129 {
+
6130 public:
+
6131 http_url_port(_In_ const std::locale& locale = std::locale()) :
+
6132 parser(locale),
+
6133 value(0)
+
6134 {}
+
6135
+
6136 virtual bool match(
+
6137 _In_reads_or_z_(end) const char* text,
+
6138 _In_ size_t start = 0,
+
6139 _In_ size_t end = SIZE_MAX,
+
6140 _In_ int flags = match_default)
+
6141 {
+
6142 _Assume_(text || start >= end);
+
6143 value = 0;
+
6144 this->interval.end = start;
+
6145 for (;;) {
+
6146 if (this->interval.end < end && text[this->interval.end]) {
+
6147 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
+
6148 size_t _value = (size_t)value * 10 + text[this->interval.end] - '0';
+
6149 if (_value > (uint16_t)-1) {
+
6150 value = 0;
+
6151 this->interval.invalidate();
+
6152 return false;
+
6153 }
+
6154 value = (uint16_t)_value;
+
6155 this->interval.end++;
+
6156 }
+
6157 else
+
6158 break;
+
6159 }
+
6160 else
+
6161 break;
+
6162 }
+ +
6164 this->interval.start = start;
+
6165 return true;
+
6166 }
+
6167 this->interval.invalidate();
+
6168 return false;
+
6169 }
+
6170
+
6171 virtual void invalidate()
+
6172 {
+
6173 value = 0;
+
6174 parser::invalidate();
+
6175 }
+
6176
+
6177 public:
+
6178 uint16_t value;
+
6179 };
-
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 };
+
6180
+
+ +
6185 {
+
6186 public:
+
6187 virtual bool match(
+
6188 _In_reads_or_z_(end) const char* text,
+
6189 _In_ size_t start = 0,
+
6190 _In_ size_t end = SIZE_MAX,
+
6191 _In_ int flags = match_default)
+
6192 {
+
6193 _Assume_(text || start >= end);
+
6194 this->interval.end = start;
+
6195 for (;;) {
+
6196 if (this->interval.end < end && text[this->interval.end]) {
+
6197 if ((unsigned int)text[this->interval.end] < 0x20 ||
+
6198 (unsigned int)text[this->interval.end] == 0x7f ||
+
6199 text[this->interval.end] == '?' ||
+
6200 text[this->interval.end] == '/' ||
+
6201 isspace(text[this->interval.end]))
+
6202 break;
+
6203 else
+
6204 this->interval.end++;
+
6205 }
+
6206 else
+
6207 break;
+
6208 }
+
6209 this->interval.start = start;
+
6210 return true;
+
6211 }
+
6212 };
-
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 };
+
6213
+
+
6217 class http_url_path : public parser
+
6218 {
+
6219 public:
+
6220 virtual bool match(
+
6221 _In_reads_or_z_(end) const char* text,
+
6222 _In_ size_t start = 0,
+
6223 _In_ size_t end = SIZE_MAX,
+
6224 _In_ int flags = match_default)
+
6225 {
+
6226 _Assume_(text || start >= end);
+ +
6228 this->interval.end = start;
+
6229 segments.clear();
+
6230 _Assume_(text || this->interval.end >= end);
+
6231 if (this->interval.end < end && text[this->interval.end] != '/')
+
6232 goto error;
+
6233 this->interval.end++;
+
6234 s.match(text, this->interval.end, end, flags);
+
6235 segments.push_back(s);
+
6236 this->interval.end = s.interval.end;
+
6237 for (;;) {
+
6238 if (this->interval.end < end && text[this->interval.end]) {
+
6239 if (text[this->interval.end] == '/') {
+
6240 this->interval.end++;
+
6241 s.match(text, this->interval.end, end, flags);
+
6242 segments.push_back(s);
+
6243 this->interval.end = s.interval.end;
+
6244 }
+
6245 else
+
6246 break;
+
6247 }
+
6248 else
+
6249 break;
+
6250 }
+
6251 this->interval.start = start;
+
6252 return true;
+
6253
+
6254 error:
+
6255 segments.clear();
+
6256 this->interval.invalidate();
+
6257 return false;
+
6258 }
+
6259
+
6260 virtual void invalidate()
+
6261 {
+
6262 segments.clear();
+
6263 parser::invalidate();
+
6264 }
+
6265
+
6266 public:
+
6267 std::vector<http_url_path_segment> segments;
+
6268 };
-
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 };
+
6269
+
+ +
6274 {
+
6275 public:
+
6276 virtual bool match(
+
6277 _In_reads_or_z_(end) const char* text,
+
6278 _In_ size_t start = 0,
+
6279 _In_ size_t end = SIZE_MAX,
+
6280 _In_ int flags = match_default)
+
6281 {
+
6282 _Assume_(text || start >= end);
+
6283 this->interval.end = start;
+
6284 name.start = this->interval.end;
+
6285 for (;;) {
+
6286 if (this->interval.end < end && text[this->interval.end]) {
+
6287 if ((unsigned int)text[this->interval.end] < 0x20 ||
+
6288 (unsigned int)text[this->interval.end] == 0x7f ||
+
6289 text[this->interval.end] == '&' ||
+
6290 text[this->interval.end] == '=' ||
+
6291 isspace(text[this->interval.end]))
+
6292 break;
+
6293 else
+
6294 this->interval.end++;
+
6295 }
+
6296 else
+
6297 break;
+
6298 }
+ +
6300 name.end = this->interval.end;
+
6301 else
+
6302 goto error;
+
6303 if (text[this->interval.end] == '=') {
+
6304 this->interval.end++;
+
6305 value.start = this->interval.end;
+
6306 for (;;) {
+
6307 if (this->interval.end < end && text[this->interval.end]) {
+
6308 if ((unsigned int)text[this->interval.end] < 0x20 ||
+
6309 (unsigned int)text[this->interval.end] == 0x7f ||
+
6310 text[this->interval.end] == '&' ||
+
6311 isspace(text[this->interval.end]))
+
6312 break;
+
6313 else
+
6314 this->interval.end++;
+
6315 }
+
6316 else
+
6317 break;
+
6318 }
+
6319 value.end = this->interval.end;
+
6320 }
+
6321 else {
+
6322 value.start = 1;
+
6323 value.end = 0;
+
6324 }
+
6325 this->interval.start = start;
+
6326 return true;
+
6327
+
6328 error:
+
6329 name.start = 1;
+
6330 name.end = 0;
+
6331 value.start = 1;
+
6332 value.end = 0;
+
6333 this->interval.invalidate();
+
6334 return false;
+
6335 }
+
6336
+
6337 virtual void invalidate()
+
6338 {
+
6339 name.start = 1;
+
6340 name.end = 0;
+
6341 value.start = 1;
+
6342 value.end = 0;
+
6343 parser::invalidate();
+
6344 }
+
6345
+
6346 public:
+ + +
6349 };
-
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;
+
6350
+
+
6354 class http_url : public parser
+
6355 {
+
6356 public:
+
6357 http_url(_In_ const std::locale& locale = std::locale()) :
+
6358 parser(locale),
+
6359 port(locale)
+
6360 {}
+
6361
+
6362 virtual bool match(
+
6363 _In_reads_or_z_(end) const char* text,
+
6364 _In_ size_t start = 0,
+
6365 _In_ size_t end = SIZE_MAX,
+
6366 _In_ int flags = match_default)
+
6367 {
+
6368 _Assume_(text || start >= end);
+
6369 this->interval.end = start;
+
6370
+
6371 if (this->interval.end + 7 <= end && stdex::strnicmp(text + this->interval.end, 7, "http://", SIZE_MAX, m_locale) == 0) {
+
6372 this->interval.end += 7;
+
6373 if (server.match(text, this->interval.end, end, flags))
+
6374 this->interval.end = server.interval.end;
+
6375 else
+
6376 goto error;
+
6377 if (this->interval.end < end && text[this->interval.end] == ':') {
+
6378 this->interval.end++;
+
6379 if (port.match(text, this->interval.end, end, flags))
+
6380 this->interval.end = port.interval.end;
+
6381 }
+
6382 else {
+
6383 port.invalidate();
+
6384 port.value = 80;
+
6385 }
+
6386 }
+
6387 else {
+
6388 server.invalidate();
+
6389 port.invalidate();
+
6390 port.value = 80;
+
6391 }
+
6392
+
6393 if (path.match(text, this->interval.end, end, flags))
+
6394 this->interval.end = path.interval.end;
+
6395 else
+
6396 goto error;
+
6397
+
6398 params.clear();
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 };
+
6400 if (this->interval.end < end && text[this->interval.end] == '?') {
+
6401 this->interval.end++;
+
6402 for (;;) {
+
6403 if (this->interval.end < end && text[this->interval.end]) {
+
6404 if ((unsigned int)text[this->interval.end] < 0x20 ||
+
6405 (unsigned int)text[this->interval.end] == 0x7f ||
+
6406 isspace(text[this->interval.end]))
+
6407 break;
+
6408 else if (text[this->interval.end] == '&')
+
6409 this->interval.end++;
+
6410 else {
+
6411 http_url_parameter param;
+
6412 if (param.match(text, this->interval.end, end, flags)) {
+
6413 this->interval.end = param.interval.end;
+
6414 params.push_back(std::move(param));
+
6415 }
+
6416 else
+
6417 break;
+
6418 }
+
6419 }
+
6420 else
+
6421 break;
+
6422 }
+
6423 }
+
6424
+
6425 this->interval.start = start;
+
6426 return true;
+
6427
+
6428 error:
+
6429 server.invalidate();
+
6430 port.invalidate();
+
6431 path.invalidate();
+
6432 params.clear();
+
6433 this->interval.invalidate();
+
6434 return false;
+
6435 }
+
6436
+
6437 virtual void invalidate()
+
6438 {
+
6439 server.invalidate();
+
6440 port.invalidate();
+
6441 path.invalidate();
+
6442 params.clear();
+
6443 parser::invalidate();
+
6444 }
+
6445
+
6446 public:
+
6447 http_url_server server;
+
6448 http_url_port port;
+
6449 http_url_path path;
+
6450 std::list<http_url_parameter> params;
+
6451 };
-
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 };
+
6452
+
+
6456 class http_language : public parser
+
6457 {
+
6458 public:
+
6459 virtual bool match(
+
6460 _In_reads_or_z_(end) const char* text,
+
6461 _In_ size_t start = 0,
+
6462 _In_ size_t end = SIZE_MAX,
+
6463 _In_ int flags = match_default)
+
6464 {
+
6465 _Assume_(text || start >= end);
+
6466 this->interval.end = start;
+
6467 components.clear();
+
6468 for (;;) {
+
6469 if (this->interval.end < end && text[this->interval.end]) {
+ +
6471 k.end = this->interval.end;
+
6472 for (;;) {
+
6473 if (k.end < end && text[k.end]) {
+
6474 if (isalpha(text[k.end]))
+
6475 k.end++;
+
6476 else
+
6477 break;
+
6478 }
+
6479 else
+
6480 break;
+
6481 }
+
6482 if (this->interval.end < k.end) {
+
6483 k.start = this->interval.end;
+
6484 this->interval.end = k.end;
+
6485 components.push_back(k);
+
6486 }
+
6487 else
+
6488 break;
+
6489 if (this->interval.end < end && text[this->interval.end] == '-')
+
6490 this->interval.end++;
+
6491 else
+
6492 break;
+
6493 }
+
6494 else
+
6495 break;
+
6496 }
+
6497 if (!components.empty()) {
+
6498 this->interval.start = start;
+
6499 this->interval.end = components.back().end;
+
6500 return true;
+
6501 }
+
6502 this->interval.invalidate();
+
6503 return false;
+
6504 }
+
6505
+
6506 virtual void invalidate()
+
6507 {
+
6508 components.clear();
+
6509 parser::invalidate();
+
6510 }
+
6511
+
6512 public:
+
6513 std::vector<stdex::interval<size_t>> components;
+
6514 };
-
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 };
+
6515
+
+
6519 class http_weight : public parser
+
6520 {
+
6521 public:
+
6522 http_weight(_In_ const std::locale& locale = std::locale()) :
+
6523 parser(locale),
+
6524 value(1.0f)
+
6525 {}
+
6526
+
6527 virtual bool match(
+
6528 _In_reads_or_z_(end) const char* text,
+
6529 _In_ size_t start = 0,
+
6530 _In_ size_t end = SIZE_MAX,
+
6531 _In_ int flags = match_default)
+
6532 {
+
6533 _Assume_(text || start >= end);
+
6534 size_t celi_del = 0, decimalni_del = 0, decimalni_del_n = 1;
+
6535 this->interval.end = start;
+
6536 for (;;) {
+
6537 if (this->interval.end < end && text[this->interval.end]) {
+
6538 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
+
6539 celi_del = celi_del * 10 + text[this->interval.end] - '0';
+
6540 this->interval.end++;
+
6541 }
+
6542 else if (text[this->interval.end] == '.') {
+
6543 this->interval.end++;
+
6544 for (;;) {
+
6545 if (this->interval.end < end && text[this->interval.end]) {
+
6546 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
+
6547 decimalni_del = decimalni_del * 10 + text[this->interval.end] - '0';
+
6548 decimalni_del_n *= 10;
+
6549 this->interval.end++;
+
6550 }
+
6551 else
+
6552 break;
+
6553 }
+
6554 else
+
6555 break;
+
6556 }
+
6557 break;
+
6558 }
+
6559 else
+
6560 break;
+
6561 }
+
6562 else
+
6563 break;
+
6564 }
+ + +
6567 this->interval.start = start;
+
6568 return true;
+
6569 }
+
6570 value = 1.0f;
+
6571 this->interval.invalidate();
+
6572 return false;
+
6573 }
+
6574
+
6575 virtual void invalidate()
+
6576 {
+
6577 value = 1.0f;
+
6578 parser::invalidate();
+
6579 }
+
6580
+
6581 public:
+
6582 float value;
+
6583 };
-
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 };
+
6584
+
+
6588 class http_asterisk : public parser
+
6589 {
+
6590 public:
+
6591 virtual bool match(
+
6592 _In_reads_or_z_(end) const char* text,
+
6593 _In_ size_t start = 0,
+
6594 _In_ size_t end = SIZE_MAX,
+
6595 _In_ int flags = match_default)
+
6596 {
+
6597 _Assume_(text || end <= start);
+
6598 if (start < end && text[start] == '*') {
+
6599 this->interval.end = (this->interval.start = start) + 1;
+
6600 return true;
+
6601 }
+
6602 this->interval.invalidate();
+
6603 return false;
+
6604 }
+
6605 };
-
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 };
+
6606
+
6610 template <class T, class T_asterisk = http_asterisk>
+
+ +
6612 {
+
6613 public:
+
6614 http_weighted_value(_In_ const std::locale& locale = std::locale()) :
+
6615 parser(locale),
+
6616 factor(locale)
+
6617 {}
+
6618
+
6619 virtual bool match(
+
6620 _In_reads_or_z_(end) const char* text,
+
6621 _In_ size_t start = 0,
+
6622 _In_ size_t end = SIZE_MAX,
+
6623 _In_ int flags = match_default)
+
6624 {
+
6625 _Assume_(text || start >= end);
+
6626 size_t konec_vrednosti;
+
6627 this->interval.end = start;
+
6628 if (asterisk.match(text, this->interval.end, end, flags)) {
+
6629 this->interval.end = konec_vrednosti = asterisk.interval.end;
+
6630 value.invalidate();
+
6631 }
+
6632 else if (value.match(text, this->interval.end, end, flags)) {
+
6633 this->interval.end = konec_vrednosti = value.interval.end;
+
6634 asterisk.invalidate();
+
6635 }
+
6636 else {
+
6637 asterisk.invalidate();
+
6638 value.invalidate();
+
6639 this->interval.invalidate();
+
6640 return false;
+
6641 }
+
6642
+
6643 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
6644 if (this->interval.end < end && text[this->interval.end] == ';') {
+
6645 this->interval.end++;
+
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] == 'q' || text[this->interval.end] == 'Q')) {
+
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] == '=') {
+
6651 this->interval.end++;
+
6652 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
6653 if (factor.match(text, this->interval.end, end, flags))
+
6654 this->interval.end = factor.interval.end;
+
6655 }
+
6656 }
+
6657 }
+
6658 if (!factor.interval) {
+
6659 factor.invalidate();
+ +
6661 }
+
6662 this->interval.start = start;
+
6663 return true;
+
6664 }
+
6665
+
6666 virtual void invalidate()
+
6667 {
+
6668 asterisk.invalidate();
+
6669 value.invalidate();
+
6670 factor.invalidate();
+
6671 parser::invalidate();
+
6672 }
+
6673
+
6674 public:
+
6675 T_asterisk asterisk;
+
6676 T value;
+
6677 http_weight factor;
+
6678 };
-
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 };
+
6679
+
+ +
6684 {
+
6685 public:
+
6686 virtual bool match(
+
6687 _In_reads_or_z_(end) const char* text,
+
6688 _In_ size_t start = 0,
+
6689 _In_ size_t end = SIZE_MAX,
+
6690 _In_ int flags = match_default)
+
6691 {
+
6692 _Assume_(text || start >= end);
+
6693 this->interval.end = start;
+
6694 if (this->interval.end < end && text[this->interval.end] == '$')
+
6695 this->interval.end++;
+
6696 else
+
6697 goto error;
+
6698 if (name.match(text, this->interval.end, end, flags))
+
6699 this->interval.end = name.interval.end;
+
6700 else
+
6701 goto error;
+
6702 while (m_space.match(text, this->interval.end, end, flags))
+
6703 this->interval.end = m_space.interval.end;
+
6704 if (this->interval.end < end && text[this->interval.end] == '=')
+
6705 this->interval.end++;
+
6706 else
+
6707 goto error;
+
6708 while (m_space.match(text, this->interval.end, end, flags))
+
6709 this->interval.end = m_space.interval.end;
+
6710 if (value.match(text, this->interval.end, end, flags))
+
6711 this->interval.end = value.interval.end;
+
6712 else
+
6713 goto error;
+
6714 this->interval.start = start;
+
6715 return true;
+
6716
+
6717 error:
+
6718 name.invalidate();
+
6719 value.invalidate();
+
6720 this->interval.invalidate();
+
6721 return false;
+
6722 }
+
6723
+
6724 virtual void invalidate()
+
6725 {
+
6726 name.invalidate();
+
6727 value.invalidate();
+
6728 parser::invalidate();
+
6729 }
+
6730
+
6731 public:
+
6732 http_token name;
+
6733 http_value value;
+
6734
+
6735 protected:
+
6736 http_space m_space;
+
6737 };
-
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 };
+
6738
+
+
6742 class http_cookie : public parser
+
6743 {
+
6744 public:
+
6745 virtual bool match(
+
6746 _In_reads_or_z_(end) const char* text,
+
6747 _In_ size_t start = 0,
+
6748 _In_ size_t end = SIZE_MAX,
+
6749 _In_ int flags = match_default)
+
6750 {
+
6751 _Assume_(text || start >= end);
+
6752 this->interval.end = start;
+
6753 if (name.match(text, this->interval.end, end, flags))
+
6754 this->interval.end = name.interval.end;
+
6755 else
+
6756 goto error;
+
6757 while (m_space.match(text, this->interval.end, end, flags))
+
6758 this->interval.end = m_space.interval.end;
+
6759 if (this->interval.end < end && text[this->interval.end] == '=')
+
6760 this->interval.end++;
+
6761 else
+
6762 goto error;
+
6763 while (m_space.match(text, this->interval.end, end, flags))
+
6764 this->interval.end = m_space.interval.end;
+
6765 if (value.match(text, this->interval.end, end, flags))
+
6766 this->interval.end = value.interval.end;
+
6767 else
+
6768 goto error;
+
6769 params.clear();
+
6770 for (;;) {
+
6771 if (this->interval.end < end && text[this->interval.end]) {
+
6772 if (m_space.match(text, this->interval.end, end, flags))
+
6773 this->interval.end = m_space.interval.end;
+
6774 else if (text[this->interval.end] == ';') {
+
6775 this->interval.end++;
+
6776 while (m_space.match(text, this->interval.end, end, flags))
+
6777 this->interval.end = m_space.interval.end;
+ +
6779 if (param.match(text, this->interval.end, end, flags)) {
+
6780 this->interval.end = param.interval.end;
+
6781 params.push_back(std::move(param));
+
6782 }
+
6783 else
+
6784 break;
+
6785 }
+
6786 else
+
6787 break;
+
6788 }
+
6789 else
+
6790 break;
+
6791 }
+
6792 this->interval.start = start;
+
6793 this->interval.end = params.empty() ? value.interval.end : params.back().interval.end;
+
6794 return true;
+
6795
+
6796 error:
+
6797 name.invalidate();
+
6798 value.invalidate();
+
6799 params.clear();
+
6800 this->interval.invalidate();
+
6801 return false;
+
6802 }
+
6803
+
6804 virtual void invalidate()
+
6805 {
+
6806 name.invalidate();
+
6807 value.invalidate();
+
6808 params.clear();
+
6809 parser::invalidate();
+
6810 }
+
6811
+
6812 public:
+ + +
6815 std::list<http_cookie_parameter> params;
+
6816
+
6817 protected:
+
6818 http_space m_space;
+
6819 };
-
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 };
+
6820
+
+
6824 class http_agent : public parser
+
6825 {
+
6826 public:
+
6827 virtual bool match(
+
6828 _In_reads_or_z_(end) const char* text,
+
6829 _In_ size_t start = 0,
+
6830 _In_ size_t end = SIZE_MAX,
+
6831 _In_ int flags = match_default)
+
6832 {
+
6833 _Assume_(text || start >= end);
+
6834 this->interval.end = start;
+
6835 type.start = this->interval.end;
+
6836 for (;;) {
+
6837 if (this->interval.end < end && text[this->interval.end]) {
+
6838 if (text[this->interval.end] == '/') {
+
6839 type.end = this->interval.end;
+
6840 this->interval.end++;
+
6841 version.start = this->interval.end;
+
6842 for (;;) {
+
6843 if (this->interval.end < end && text[this->interval.end]) {
+
6844 if (isspace(text[this->interval.end])) {
+
6845 version.end = this->interval.end;
+
6846 break;
+
6847 }
+
6848 else
+
6849 this->interval.end++;
+
6850 }
+
6851 else {
+
6852 version.end = this->interval.end;
+
6853 break;
+
6854 }
+
6855 }
+
6856 break;
+
6857 }
+
6858 else if (isspace(text[this->interval.end])) {
+
6859 type.end = this->interval.end;
+
6860 break;
+
6861 }
+
6862 else
+
6863 this->interval.end++;
+
6864 }
+
6865 else {
+
6866 type.end = this->interval.end;
+
6867 break;
+
6868 }
+
6869 }
+ +
6871 this->interval.start = start;
+
6872 return true;
+
6873 }
+
6874 type.start = 1;
+
6875 type.end = 0;
+
6876 version.start = 1;
+
6877 version.end = 0;
+
6878 this->interval.invalidate();
+
6879 return false;
+
6880 }
+
6881
+
6882 virtual void invalidate()
+
6883 {
+
6884 type.start = 1;
+
6885 type.end = 0;
+
6886 version.start = 1;
+
6887 version.end = 0;
+
6888 parser::invalidate();
+
6889 }
+
6890
+
6891 public:
+ + +
6894 };
-
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 };
+
6895
+
+
6899 class http_protocol : public parser
+
6900 {
+
6901 public:
+
6902 http_protocol(_In_ const std::locale& locale = std::locale()) :
+
6903 parser(locale),
+
6904 version(0x009)
+
6905 {}
+
6906
+
6907 virtual bool match(
+
6908 _In_reads_or_z_(end) const char* text,
+
6909 _In_ size_t start = 0,
+
6910 _In_ size_t end = SIZE_MAX,
+
6911 _In_ int flags = match_default)
+
6912 {
+
6913 _Assume_(text || start >= end);
+
6914 this->interval.end = start;
+
6915 type.start = this->interval.end;
+
6916 for (;;) {
+
6917 if (this->interval.end < end && text[this->interval.end]) {
+
6918 if (text[this->interval.end] == '/') {
+
6919 type.end = this->interval.end;
+
6920 this->interval.end++;
+
6921 break;
+
6922 }
+
6923 else if (isspace(text[this->interval.end]))
+
6924 goto error;
+
6925 else
+
6926 this->interval.end++;
+
6927 }
+
6928 else {
+
6929 type.end = this->interval.end;
+
6930 goto error;
+
6931 }
+
6932 }
+
6933 version_maj.start = this->interval.end;
+
6934 for (;;) {
+
6935 if (this->interval.end < end && text[this->interval.end]) {
+
6936 if (text[this->interval.end] == '.') {
+
6937 version_maj.end = this->interval.end;
+
6938 this->interval.end++;
+
6939 version_min.start = this->interval.end;
+
6940 for (;;) {
+
6941 if (this->interval.end < end && text[this->interval.end]) {
+
6942 if (isspace(text[this->interval.end])) {
+
6943 version_min.end = this->interval.end;
+
6944 version =
+
6945 (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100 +
+
6946 (uint16_t)strtoui(text + version_min.start, version_min.size(), nullptr, 10);
+
6947 break;
+
6948 }
+
6949 else
+
6950 this->interval.end++;
+
6951 }
+
6952 else
+
6953 goto error;
+
6954 }
+
6955 break;
+
6956 }
+
6957 else if (isspace(text[this->interval.end])) {
+
6958 version_maj.end = this->interval.end;
+
6959 version_min.start = 1;
+
6960 version_min.end = 0;
+
6961 version = (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100;
+
6962 break;
+
6963 }
+
6964 else
+
6965 this->interval.end++;
+
6966 }
+
6967 else
+
6968 goto error;
+
6969 }
+
6970 this->interval.start = start;
+
6971 return true;
+
6972
+
6973 error:
+
6974 type.start = 1;
+
6975 type.end = 0;
+
6976 version_maj.start = 1;
+
6977 version_maj.end = 0;
+
6978 version_min.start = 1;
+
6979 version_min.end = 0;
+
6980 version = 0x009;
+
6981 this->interval.invalidate();
+
6982 return false;
+
6983 }
+
6984
+
6985 virtual void invalidate()
+
6986 {
+
6987 type.start = 1;
+
6988 type.end = 0;
+
6989 version_maj.start = 1;
+
6990 version_maj.end = 0;
+
6991 version_min.start = 1;
+
6992 version_min.end = 0;
+
6993 version = 0x009;
+
6994 parser::invalidate();
+
6995 }
+
6996
+
6997 public:
+ +
6999 stdex::interval<size_t> version_maj;
+
7000 stdex::interval<size_t> version_min;
+ +
7002 };
-
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 };
+
7003
+
+
7007 class http_request : public parser
+
7008 {
+
7009 public:
+
7010 http_request(_In_ const std::locale& locale = std::locale()) :
+
7011 parser(locale),
+
7012 url(locale),
+
7013 protocol(locale)
+
7014 {}
+
7015
+
7016 virtual bool match(
+
7017 _In_reads_or_z_(end) const char* text,
+
7018 _In_ size_t start = 0,
+
7019 _In_ size_t end = SIZE_MAX,
+
7020 _In_ int flags = match_default)
+
7021 {
+
7022 _Assume_(text || start >= end);
+
7023 this->interval.end = start;
+
7024
+
7025 for (;;) {
+
7026 if (m_line_break.match(text, this->interval.end, end, flags))
+
7027 goto error;
+
7028 else if (this->interval.end < end && text[this->interval.end]) {
+
7029 if (isspace(text[this->interval.end]))
+
7030 this->interval.end++;
+
7031 else
+
7032 break;
+
7033 }
+
7034 else
+
7035 goto error;
+
7036 }
+
7037 verb.start = this->interval.end;
+
7038 for (;;) {
+
7039 if (m_line_break.match(text, this->interval.end, end, flags))
+
7040 goto error;
+
7041 else if (this->interval.end < end && text[this->interval.end]) {
+
7042 if (isspace(text[this->interval.end])) {
+
7043 verb.end = this->interval.end;
+
7044 this->interval.end++;
+
7045 break;
+
7046 }
+
7047 else
+
7048 this->interval.end++;
+
7049 }
+
7050 else
+
7051 goto error;
+
7052 }
+
7053
+
7054 for (;;) {
+
7055 if (m_line_break.match(text, this->interval.end, end, flags))
+
7056 goto error;
+
7057 else if (this->interval.end < end && text[this->interval.end]) {
+
7058 if (isspace(text[this->interval.end]))
+
7059 this->interval.end++;
+
7060 else
+
7061 break;
+
7062 }
+
7063 else
+
7064 goto error;
+
7065 }
+
7066 if (url.match(text, this->interval.end, end, flags))
+
7067 this->interval.end = url.interval.end;
+
7068 else
+
7069 goto error;
+
7070
+
7071 protocol.invalidate();
+
7072 for (;;) {
+
7073 if (m_line_break.match(text, this->interval.end, end, flags)) {
+
7074 this->interval.end = m_line_break.interval.end;
+
7075 goto end;
+
7076 }
+
7077 else if (this->interval.end < end && text[this->interval.end]) {
+
7078 if (isspace(text[this->interval.end]))
+
7079 this->interval.end++;
+
7080 else
+
7081 break;
+
7082 }
+
7083 else
+
7084 goto end;
+
7085 }
+
7086 for (;;) {
+
7087 if (m_line_break.match(text, this->interval.end, end, flags)) {
+
7088 this->interval.end = m_line_break.interval.end;
+
7089 goto end;
+
7090 }
+
7091 else if (protocol.match(text, this->interval.end, end, flags)) {
+
7092 this->interval.end = protocol.interval.end;
+
7093 break;
+
7094 }
+
7095 else
+
7096 goto end;
+
7097 }
+
7098
+
7099 for (;;) {
+
7100 if (m_line_break.match(text, this->interval.end, end, flags)) {
+
7101 this->interval.end = m_line_break.interval.end;
+
7102 break;
+
7103 }
+
7104 else if (this->interval.end < end && text[this->interval.end])
+
7105 this->interval.end++;
+
7106 else
+
7107 goto end;
+
7108 }
+
7109
+
7110 end:
+
7111 this->interval.start = start;
+
7112 return true;
+
7113
+
7114 error:
+
7115 verb.start = 1;
+
7116 verb.end = 0;
+
7117 url.invalidate();
+
7118 protocol.invalidate();
+
7119 this->interval.invalidate();
+
7120 return false;
+
7121 }
+
7122
+
7123 virtual void invalidate()
+
7124 {
+
7125 verb.start = 1;
+
7126 verb.end = 0;
+
7127 url.invalidate();
+
7128 protocol.invalidate();
+
7129 parser::invalidate();
+
7130 }
+
7131
+
7132 public:
+ +
7134 http_url url;
+
7135 http_protocol protocol;
+
7136
+
7137 protected:
+
7138 http_line_break m_line_break;
+
7139 };
-
7142
-
-
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 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 }
-
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 };
+
7140
+
+
7144 class http_header : public parser
+
7145 {
+
7146 public:
+
7147 virtual bool match(
+
7148 _In_reads_or_z_(end) const char* text,
+
7149 _In_ size_t start = 0,
+
7150 _In_ size_t end = SIZE_MAX,
+
7151 _In_ int flags = match_default)
+
7152 {
+
7153 _Assume_(text || start >= end);
+
7154 this->interval.end = start;
+
7155
+
7156 if (m_line_break.match(text, this->interval.end, end, flags) ||
+
7157 (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])))
+
7158 goto error;
+
7159 name.start = this->interval.end;
+
7160 for (;;) {
+
7161 if (m_line_break.match(text, this->interval.end, end, flags))
+
7162 goto error;
+
7163 else if (this->interval.end < end && text[this->interval.end]) {
+
7164 if (isspace(text[this->interval.end])) {
+
7165 name.end = this->interval.end;
+
7166 this->interval.end++;
+
7167 for (;;) {
+
7168 if (m_line_break.match(text, this->interval.end, end, flags))
+
7169 goto error;
+
7170 else if (this->interval.end < end && text[this->interval.end]) {
+
7171 if (isspace(text[this->interval.end]))
+
7172 this->interval.end++;
+
7173 else
+
7174 break;
+
7175 }
+
7176 else
+
7177 goto error;
+
7178 }
+
7179 if (this->interval.end < end && text[this->interval.end] == ':') {
+
7180 this->interval.end++;
+
7181 break;
+
7182 }
+
7183 else
+
7184 goto error;
+
7185 break;
+
7186 }
+
7187 else if (text[this->interval.end] == ':') {
+
7188 name.end = this->interval.end;
+
7189 this->interval.end++;
+
7190 break;
+
7191 }
+
7192 else
+
7193 this->interval.end++;
+
7194 }
+
7195 else
+
7196 goto error;
+
7197 }
+
7198 value.start = SIZE_MAX;
+
7199 value.end = 0;
+
7200 for (;;) {
+
7201 if (m_line_break.match(text, this->interval.end, end, flags)) {
+
7202 this->interval.end = m_line_break.interval.end;
+
7203 if (!m_line_break.match(text, this->interval.end, end, flags) &&
+
7204 this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end]))
+
7205 this->interval.end++;
+
7206 else
+
7207 break;
+
7208 }
+
7209 else if (this->interval.end < end && text[this->interval.end]) {
+
7210 if (isspace(text[this->interval.end]))
+
7211 this->interval.end++;
+
7212 else {
+
7213 if (value.start == SIZE_MAX) value.start = this->interval.end;
+
7214 value.end = ++this->interval.end;
+
7215 }
+
7216 }
+
7217 else
+
7218 break;
+
7219 }
+
7220 this->interval.start = start;
+
7221 return true;
+
7222
+
7223 error:
+
7224 name.start = 1;
+
7225 name.end = 0;
+
7226 value.start = 1;
+
7227 value.end = 0;
+
7228 this->interval.invalidate();
+
7229 return false;
+
7230 }
+
7231
+
7232 virtual void invalidate()
+
7233 {
+
7234 name.start = 1;
+
7235 name.end = 0;
+
7236 value.start = 1;
+
7237 value.end = 0;
+
7238 parser::invalidate();
+
7239 }
+
7240
+
7241 public:
+ + +
7244
+
7245 protected:
+
7246 http_line_break m_line_break;
+
7247 };
-
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 else
-
7276 break;
-
7277 }
-
7278 }
-
7279 };
+
7248
+
7252 template <class _Key, class T>
+
+
7253 class http_value_collection : public T
+
7254 {
+
7255 public:
+
7256 void insert(
+
7257 _In_reads_or_z_(end) const char* text,
+
7258 _In_ size_t start = 0,
+
7259 _In_ size_t end = SIZE_MAX,
+
7260 _In_ int flags = match_default)
+
7261 {
+
7262 while (start < end) {
+
7263 while (start < end && text[start] && isspace(text[start])) start++;
+
7264 if (start < end && text[start] == ',') {
+
7265 start++;
+
7266 while (start < end&& text[start] && isspace(text[start])) start++;
+
7267 }
+
7268 _Key el;
+
7269 if (el.match(text, start, end, flags)) {
+
7270 start = el.interval.end;
+
7271 T::insert(std::move(el));
+
7272 }
+
7273 else
+
7274 break;
+
7275 }
+
7276 }
+
7277 };
-
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 };
+
7278
+
7279 template <class T>
+
+ +
7281 constexpr bool operator()(const T& a, const T& b) const noexcept
+
7282 {
+
7283 return a.factor.value > b.factor.value;
+
7284 }
+
7285 };
-
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 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 };
+
7286
+
7290 template <class T, class _Alloc = std::allocator<T>>
+ +
7292
+
7296 template <class T>
+
+ +
7298 {
+
7299 public:
+ +
7301 _In_ const std::shared_ptr<basic_parser<T>>& quote,
+
7302 _In_ const std::shared_ptr<basic_parser<T>>& chr,
+
7303 _In_ const std::shared_ptr<basic_parser<T>>& escape,
+
7304 _In_ const std::shared_ptr<basic_parser<T>>& sol,
+
7305 _In_ const std::shared_ptr<basic_parser<T>>& bs,
+
7306 _In_ const std::shared_ptr<basic_parser<T>>& ff,
+
7307 _In_ const std::shared_ptr<basic_parser<T>>& lf,
+
7308 _In_ const std::shared_ptr<basic_parser<T>>& cr,
+
7309 _In_ const std::shared_ptr<basic_parser<T>>& htab,
+
7310 _In_ const std::shared_ptr<basic_parser<T>>& uni,
+
7311 _In_ const std::shared_ptr<basic_integer16<T>>& hex,
+
7312 _In_ const std::locale& locale = std::locale()) :
+
7313 basic_parser<T>(locale),
+
7314 m_quote(quote),
+
7315 m_chr(chr),
+
7316 m_escape(escape),
+
7317 m_sol(sol),
+
7318 m_bs(bs),
+
7319 m_ff(ff),
+
7320 m_lf(lf),
+
7321 m_cr(cr),
+
7322 m_htab(htab),
+
7323 m_uni(uni),
+
7324 m_hex(hex)
+
7325 {}
+
7326
+
7327 virtual bool match(
+
7328 _In_reads_or_z_(end) const T* text,
+
7329 _In_ size_t start = 0,
+
7330 _In_ size_t end = SIZE_MAX,
+
7331 _In_ int flags = match_default)
+
7332 {
+
7333 _Assume_(text || start >= end);
+
7334 this->interval.end = start;
+
7335 if (m_quote->match(text, this->interval.end, end, flags)) {
+
7336 this->interval.end = m_quote->interval.end;
+
7337 value.clear();
+
7338 for (;;) {
+
7339 if (m_quote->match(text, this->interval.end, end, flags)) {
+
7340 this->interval.start = start;
+
7341 this->interval.end = m_quote->interval.end;
+
7342 return true;
+
7343 }
+
7344 if (m_escape->match(text, this->interval.end, end, flags)) {
+
7345 if (m_quote->match(text, m_escape->interval.end, end, flags)) {
+
7346 value += '"'; this->interval.end = m_quote->interval.end;
+
7347 continue;
+
7348 }
+
7349 if (m_sol->match(text, m_escape->interval.end, end, flags)) {
+
7350 value += '/'; this->interval.end = m_sol->interval.end;
+
7351 continue;
+
7352 }
+
7353 if (m_bs->match(text, m_escape->interval.end, end, flags)) {
+
7354 value += '\b'; this->interval.end = m_bs->interval.end;
+
7355 continue;
+
7356 }
+
7357 if (m_ff->match(text, m_escape->interval.end, end, flags)) {
+
7358 value += '\f'; this->interval.end = m_ff->interval.end;
+
7359 continue;
+
7360 }
+
7361 if (m_lf->match(text, m_escape->interval.end, end, flags)) {
+
7362 value += '\n'; this->interval.end = m_lf->interval.end;
+
7363 continue;
+
7364 }
+
7365 if (m_cr->match(text, m_escape->interval.end, end, flags)) {
+
7366 value += '\r'; this->interval.end = m_cr->interval.end;
+
7367 continue;
+
7368 }
+
7369 if (m_htab->match(text, m_escape->interval.end, end, flags)) {
+
7370 value += '\t'; this->interval.end = m_htab->interval.end;
+
7371 continue;
+
7372 }
+
7373 if (
+
7374 m_uni->match(text, m_escape->interval.end, end, flags) &&
+
7375 m_hex->match(text, m_uni->interval.end, std::min(m_uni->interval.end + 4, end), flags | match_case_insensitive) &&
+
7376 m_hex->interval.size() == 4 /* JSON requests 4-digit Unicode sequneces: \u.... */)
+
7377 {
+
7378 _Assume_(m_hex->value <= 0xffff);
+
7379 if (sizeof(T) == 1) {
+
7380 if (m_hex->value > 0x7ff) {
+
7381 value += (T)(0xe0 | ((m_hex->value >> 12) & 0x0f));
+
7382 value += (T)(0x80 | ((m_hex->value >> 6) & 0x3f));
+
7383 value += (T)(0x80 | (m_hex->value & 0x3f));
+
7384 }
+
7385 else if (m_hex->value > 0x7f) {
+
7386 value += (T)(0xc0 | ((m_hex->value >> 6) & 0x1f));
+
7387 value += (T)(0x80 | (m_hex->value & 0x3f));
+
7388 }
+
7389 else
+
7390 value += (T)(m_hex->value & 0x7f);
+
7391 }
+
7392 else
+
7393 value += (T)m_hex->value;
+
7394 this->interval.end = m_hex->interval.end;
+
7395 continue;
+
7396 }
+
7397 if (m_escape->match(text, m_escape->interval.end, end, flags)) {
+
7398 value += '\\'; this->interval.end = m_escape->interval.end;
+
7399 continue;
+
7400 }
+
7401 }
+
7402 if (m_chr->match(text, this->interval.end, end, flags)) {
+
7403 value.append(text + m_chr->interval.start, m_chr->interval.size());
+
7404 this->interval.end = m_chr->interval.end;
+
7405 continue;
+
7406 }
+
7407 break;
+
7408 }
+
7409 }
+
7410 value.clear();
+
7411 this->interval.invalidate();
+
7412 return false;
+
7413 }
+
7414
+
7415 virtual void invalidate()
+
7416 {
+
7417 value.clear();
+ +
7419 }
+
7420
+
7421 public:
+
7422 std::basic_string<T> value;
+
7423
+
7424 protected:
+
7425 std::shared_ptr<basic_parser<T>> m_quote;
+
7426 std::shared_ptr<basic_parser<T>> m_chr;
+
7427 std::shared_ptr<basic_parser<T>> m_escape;
+
7428 std::shared_ptr<basic_parser<T>> m_sol;
+
7429 std::shared_ptr<basic_parser<T>> m_bs;
+
7430 std::shared_ptr<basic_parser<T>> m_ff;
+
7431 std::shared_ptr<basic_parser<T>> m_lf;
+
7432 std::shared_ptr<basic_parser<T>> m_cr;
+
7433 std::shared_ptr<basic_parser<T>> m_htab;
+
7434 std::shared_ptr<basic_parser<T>> m_uni;
+
7435 std::shared_ptr<basic_integer16<T>> m_hex;
+
7436 };
-
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 };
+
7437
+ + +
7440#ifdef _UNICODE
+
7441 using tjson_string = wjson_string;
+
7442#else
+
7443 using tjson_string = json_string;
+
7444#endif
+
7445
+
7449 template <class T>
+
+ +
7451 {
+
7452 public:
+
7453 virtual bool match(
+
7454 _In_reads_or_z_opt_(end) const T* text,
+
7455 _In_ size_t start = 0,
+
7456 _In_ size_t end = SIZE_MAX,
+
7457 _In_ int flags = match_multiline)
+
7458 {
+
7459 _Unreferenced_(flags);
+
7460 _Assume_(text || start + 1 >= end);
+
7461 if (start + 1 < end &&
+
7462 text[start] == '/' &&
+
7463 text[start + 1] == '*')
+
7464 {
+
7465 // /*
+
7466 this->content.start = this->interval.end = start + 2;
+
7467 for (;;) {
+
7468 if (this->interval.end >= end || !text[this->interval.end])
+
7469 break;
+
7470 if (this->interval.end + 1 < end &&
+
7471 text[this->interval.end] == '*' &&
+
7472 text[this->interval.end + 1] == '/')
+
7473 {
+
7474 // /*...*/
+
7475 this->content.end = this->interval.end;
+
7476 this->interval.start = start;
+
7477 this->interval.end = this->interval.end + 2;
+
7478 return true;
+
7479 }
+
7480 this->interval.end++;
+
7481 }
+
7482 }
+
7483 this->content.invalidate();
+
7484 this->interval.invalidate();
+
7485 return false;
+
7486 }
+
7487
+
7488 virtual void invalidate()
+
7489 {
+
7490 this->content.invalidate();
+
7491 basic_parser::invalidate();
+
7492 }
+
7493
+
7494 public:
+ +
7496 };
-
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 };
+
7497
+ + +
7500#ifdef _UNICODE
+
7501 using tcss_comment = wcss_comment;
+
7502#else
+
7503 using tcss_comment = css_comment;
+
7504#endif
+
7505
+
7509 template <class T>
+
+
7510 class basic_css_cdo : public basic_parser<T>
+
7511 {
+
7512 public:
+
7513 virtual bool match(
+
7514 _In_reads_or_z_opt_(end) const T* text,
+
7515 _In_ size_t start = 0,
+
7516 _In_ size_t end = SIZE_MAX,
+
7517 _In_ int flags = match_multiline)
+
7518 {
+
7519 _Unreferenced_(flags);
+
7520 _Assume_(text || start + 3 >= end);
+
7521 if (start + 3 < end &&
+
7522 text[start] == '<' &&
+
7523 text[start + 1] == '!' &&
+
7524 text[start + 2] == '-' &&
+
7525 text[start + 3] == '-')
+
7526 {
+
7527 this->interval.start = start;
+
7528 this->interval.end = start + 4;
+
7529 return true;
+
7530 }
+
7531 this->interval.invalidate();
+
7532 return false;
+
7533 }
+
7534 };
-
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 };
+
7535
+ + +
7538#ifdef _UNICODE
+
7539 using tcss_cdo = wcss_cdo;
+
7540#else
+
7541 using tcss_cdo = css_cdo;
+
7542#endif
+
7543
+
7547 template <class T>
+
+
7548 class basic_css_cdc : public basic_parser<T>
+
7549 {
+
7550 public:
+
7551 virtual bool match(
+
7552 _In_reads_or_z_opt_(end) const T* text,
+
7553 _In_ size_t start = 0,
+
7554 _In_ size_t end = SIZE_MAX,
+
7555 _In_ int flags = match_multiline)
+
7556 {
+
7557 _Unreferenced_(flags);
+
7558 _Assume_(text || start + 2 >= end);
+
7559 if (start + 2 < end &&
+
7560 text[start] == '-' &&
+
7561 text[start + 1] == '-' &&
+
7562 text[start + 2] == '>')
+
7563 {
+
7564 this->interval.start = start;
+
7565 this->interval.end = start + 3;
+
7566 return true;
+
7567 }
+
7568 this->interval.invalidate();
+
7569 return false;
+
7570 }
+
7571 };
-
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 };
+
7572
+ + +
7575#ifdef _UNICODE
+
7576 using tcss_cdc = wcss_cdc;
+
7577#else
+
7578 using tcss_cdc = css_cdc;
+
7579#endif
+
7580
+
7584 template <class T>
+
+ +
7586 {
+
7587 public:
+
7588 virtual bool match(
+
7589 _In_reads_or_z_opt_(end) const T* text,
+
7590 _In_ size_t start = 0,
+
7591 _In_ size_t end = SIZE_MAX,
+
7592 _In_ int flags = match_multiline)
+
7593 {
+
7594 _Unreferenced_(flags);
+
7595 this->interval.end = start;
+
7596 _Assume_(text || this->interval.end >= end);
+
7597 if (this->interval.end < end &&
+
7598 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
+
7599 {
+
7600 // "Quoted...
+
7601 T quote = text[this->interval.end];
+
7602 this->content.start = ++this->interval.end;
+
7603 for (;;) {
+
7604 if (this->interval.end >= end || !text[this->interval.end])
+
7605 break;
+
7606 if (text[this->interval.end] == quote) {
+
7607 // End quote"
+
7608 this->content.end = this->interval.end;
+
7609 this->interval.start = start;
+
7610 this->interval.end++;
+
7611 return true;
+
7612 }
+
7613 if (this->interval.end + 1 < end &&
+
7614 text[this->interval.end] == '\\' &&
+
7615 (text[this->interval.end + 1] == '\"' || text[this->interval.end + 1] == '\''))
+
7616 {
+
7617 // Escaped quote
+
7618 this->interval.end = this->interval.end + 2;
+
7619 }
+
7620 else
+
7621 this->interval.end++;
+
7622 }
+
7623 }
+
7624
+
7625 this->content.invalidate();
+
7626 this->interval.invalidate();
+
7627 return false;
+
7628 }
+
7629
+
7630 virtual void invalidate()
+
7631 {
+
7632 this->content.invalidate();
+
7633 basic_parser::invalidate();
+
7634 }
+
7635
+
7636 public:
+ +
7638 };
-
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 };
+
7639
+ + +
7642#ifdef _UNICODE
+
7643 using tcss_string = wcss_string;
+
7644#else
+
7645 using tcss_string = css_string;
+
7646#endif
+
7647
+
7651 template <class T>
+
+
7652 class basic_css_uri : public basic_parser<T>
+
7653 {
+
7654 public:
+
7655 virtual bool match(
+
7656 _In_reads_or_z_opt_(end) const T* text,
+
7657 _In_ size_t start = 0,
+
7658 _In_ size_t end = SIZE_MAX,
+
7659 _In_ int flags = match_multiline)
+
7660 {
+
7661 _Unreferenced_(flags);
+
7662 this->interval.end = start;
+
7663 _Assume_(text || this->interval.end + 3 >= end);
+
7664 if (this->interval.end + 3 < end &&
+
7665 (text[this->interval.end] == 'u' || text[this->interval.end] == 'U') &&
+
7666 (text[this->interval.end + 1] == 'r' || text[this->interval.end + 1] == 'R') &&
+
7667 (text[this->interval.end + 2] == 'l' || text[this->interval.end + 2] == 'L') &&
+
7668 text[this->interval.end + 3] == '(')
+
7669 {
+
7670 // url(
+
7671 this->interval.end = this->interval.end + 4;
+
7672
+
7673 // Skip whitespace.
+
7674 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
+
7675 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
7676
+
7677 if (this->interval.end < end &&
+
7678 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
+
7679 {
+
7680 // url("Quoted...
+
7681 T quote = text[this->interval.end];
+
7682 this->content.start = ++this->interval.end;
+
7683 for (;;) {
+
7684 if (this->interval.end >= end || !text[this->interval.end])
+
7685 goto error;
+
7686 if (text[this->interval.end] == quote) {
+
7687 // End quote"
+
7688 this->content.end = this->interval.end;
+
7689 this->interval.end++;
+
7690 break;
+
7691 }
+
7692 if (this->interval.end + 1 < end &&
+
7693 text[this->interval.end] == '\\' &&
+
7694 (text[this->interval.end + 1] == '\"' || text[this->interval.end + 1] == '\''))
+
7695 {
+
7696 // Escaped quote
+
7697 this->interval.end = this->interval.end + 2;
+
7698 }
+
7699 else
+
7700 this->interval.end++;
+
7701 }
+
7702
+
7703 // Skip whitespace.
+
7704 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
7705
+
7706 if (this->interval.end < end &&
+
7707 text[this->interval.end] == ')')
+
7708 {
+
7709 // url("...")
+
7710 this->interval.start = start;
+
7711 this->interval.end++;
+
7712 return true;
+
7713 }
+
7714 }
+
7715 else {
+
7716 // url(...
+
7717 this->content.start = content.end = this->interval.end;
+
7718 for (;;) {
+
7719 if (this->interval.end >= end || !text[this->interval.end])
+
7720 goto error;
+
7721 if (text[this->interval.end] == ')') {
+
7722 // url(...)
+
7723 this->interval.start = start;
+
7724 this->interval.end++;
+
7725 return true;
+
7726 }
+
7727 if (ctype.is(ctype.space, text[this->interval.end]))
+
7728 this->interval.end++;
+
7729 else
+
7730 this->content.end = ++this->interval.end;
+
7731 }
+
7732 }
+
7733 }
+
7734
+
7735 error:
+
7736 this->content.invalidate();
+
7737 this->interval.invalidate();
+
7738 return false;
+
7739 }
+
7740
+
7741 virtual void invalidate()
+
7742 {
+
7743 this->content.invalidate();
+
7744 basic_parser::invalidate();
+
7745 }
+
7746
+
7747 public:
+ +
7749 };
-
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 };
+
7750
+ + +
7753#ifdef _UNICODE
+
7754 using tcss_uri = wcss_uri;
+
7755#else
+
7756 using tcss_uri = css_uri;
+
7757#endif
+
7758
+
7762 template <class T>
+
+ +
7764 {
+
7765 public:
+
7766 virtual bool match(
+
7767 _In_reads_or_z_opt_(end) const T* text,
+
7768 _In_ size_t start = 0,
+
7769 _In_ size_t end = SIZE_MAX,
+
7770 _In_ int flags = match_multiline)
+
7771 {
+
7772 _Unreferenced_(flags);
+
7773 this->interval.end = start;
+
7774 _Assume_(text || this->interval.end + 6 >= end);
+
7775 if (this->interval.end + 6 < end &&
+
7776 text[this->interval.end] == '@' &&
+
7777 (text[this->interval.end + 1] == 'i' || text[this->interval.end + 1] == 'I') &&
+
7778 (text[this->interval.end + 2] == 'm' || text[this->interval.end + 2] == 'M') &&
+
7779 (text[this->interval.end + 3] == 'p' || text[this->interval.end + 3] == 'P') &&
+
7780 (text[this->interval.end + 4] == 'o' || text[this->interval.end + 4] == 'O') &&
+
7781 (text[this->interval.end + 5] == 'r' || text[this->interval.end + 5] == 'R') &&
+
7782 (text[this->interval.end + 6] == 't' || text[this->interval.end + 6] == 'T'))
+
7783 {
+
7784 // @import...
+
7785 this->interval.end = this->interval.end + 7;
+
7786
+
7787 // Skip whitespace.
+
7788 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
+
7789 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
7790
+
7791 if (this->interval.end < end &&
+
7792 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
+
7793 {
+
7794 // @import "Quoted
+
7795 T quote = text[this->interval.end];
+
7796 this->content.start = ++this->interval.end;
+
7797 for (;;) {
+
7798 if (this->interval.end >= end || !text[this->interval.end])
+
7799 goto error;
+
7800 if (text[this->interval.end] == quote) {
+
7801 // End quote"
+
7802 this->content.end = this->interval.end;
+
7803 this->interval.start = start;
+
7804 this->interval.end++;
+
7805 return true;
+
7806 }
+
7807 if (this->interval.end + 1 < end &&
+
7808 text[this->interval.end] == '\\' &&
+
7809 (text[this->interval.end + 1] == '\"' || text[this->interval.end + 1] == '\''))
+
7810 {
+
7811 // Escaped quote
+
7812 this->interval.end = this->interval.end + 2;
+
7813 }
+
7814 else
+
7815 this->interval.end++;
+
7816 }
+
7817 }
+
7818 }
+
7819
+
7820 error:
+
7821 this->content.invalidate();
+
7822 this->interval.invalidate();
+
7823 return false;
+
7824 }
+
7825
+
7826 virtual void invalidate()
+
7827 {
+
7828 this->content.invalidate();
+
7829 basic_parser::invalidate();
+
7830 }
+
7831
+
7832 public:
+ +
7834 };
-
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 };
+
7835
+ + +
7838#ifdef _UNICODE
+
7839 using tcss_import = wcss_import;
+
7840#else
+
7841 using tcss_import = css_import;
+
7842#endif
+
7843
+
7847 template <class T>
+
+ +
7849 {
+
7850 public:
+
7851 virtual bool match(
+
7852 _In_reads_or_z_opt_(end) const T* text,
+
7853 _In_ size_t start = 0,
+
7854 _In_ size_t end = SIZE_MAX,
+
7855 _In_ int flags = match_multiline)
+
7856 {
+
7857 _Unreferenced_(flags);
+
7858 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
+
7859
+
7860 this->interval.end = start;
+
7861 this->base_type.start = this->interval.end;
+
7862 for (;;) {
+
7863 _Assume_(text || this->interval.end >= end);
+
7864 if (this->interval.end >= end || !text[this->interval.end])
+
7865 break;
+
7866 if (text[this->interval.end] == '/' ||
+
7867 text[this->interval.end] == ';' ||
+
7868 ctype.is(ctype.space, text[this->interval.end]))
+
7869 break;
+
7870 this->interval.end++;
+
7871 }
+
7872 if (this->interval.end <= this->base_type.start)
+
7873 goto error;
+
7874 this->base_type.end = this->interval.end;
+
7875
+
7876 if (end <= this->interval.end || text[this->interval.end] != '/')
+
7877 goto error;
+
7878
+
7879 this->interval.end++;
+
7880 this->sub_type.start = this->interval.end;
+
7881 for (;;) {
+
7882 if (this->interval.end >= end || !text[this->interval.end])
+
7883 break;
+
7884 if (text[this->interval.end] == '/' ||
+
7885 text[this->interval.end] == ';' ||
+
7886 ctype.is(ctype.space, text[this->interval.end]))
+
7887 break;
+
7888 this->interval.end++;
+
7889 }
+
7890 if (this->interval.end <= this->sub_type.start)
+
7891 goto error;
+
7892
+
7893 this->sub_type.end = this->interval.end;
+
7894 this->charset.invalidate();
+
7895 if (this->interval.end < end && text[this->interval.end] == ';') {
+
7896 this->interval.end++;
+
7897
+
7898 // Skip whitespace.
+
7899 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
7900
+
7901 if (this->interval.end + 7 < end &&
+
7902 (text[this->interval.end] == 'c' || text[this->interval.end] == 'C') &&
+
7903 (text[this->interval.end + 1] == 'h' || text[this->interval.end + 1] == 'H') &&
+
7904 (text[this->interval.end + 2] == 'a' || text[this->interval.end + 2] == 'A') &&
+
7905 (text[this->interval.end + 3] == 'r' || text[this->interval.end + 3] == 'R') &&
+
7906 (text[this->interval.end + 4] == 's' || text[this->interval.end + 4] == 'S') &&
+
7907 (text[this->interval.end + 5] == 'e' || text[this->interval.end + 5] == 'E') &&
+
7908 (text[this->interval.end + 6] == 't' || text[this->interval.end + 6] == 'T') &&
+
7909 text[this->interval.end + 7] == '=')
+
7910 {
+
7911 this->interval.end = this->interval.end + 8;
+
7912 if (this->interval.end < end &&
+
7913 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
+
7914 {
+
7915 // "Quoted...
+
7916 T quote = text[this->interval.end];
+
7917 this->charset.start = ++this->interval.end;
+
7918 for (;;) {
+
7919 if (this->interval.end >= end || !text[this->interval.end]) {
+
7920 // No end quote!
+
7921 this->charset.invalidate();
+
7922 break;
+
7923 }
+
7924 if (text[this->interval.end] == quote) {
+
7925 // End quote"
+
7926 this->charset.end = this->interval.end;
+
7927 this->interval.end++;
+
7928 break;
+
7929 }
+
7930 this->interval.end++;
+
7931 }
+
7932 }
+
7933 else {
+
7934 // Nonquoted
+
7935 this->charset.start = this->interval.end;
+
7936 for (;;) {
+
7937 if (this->interval.end >= end || !text[this->interval.end] ||
+
7938 ctype.is(ctype.space, text[this->interval.end])) {
+
7939 this->charset.end = this->interval.end;
+
7940 break;
+
7941 }
+
7942 this->interval.end++;
+
7943 }
+
7944 }
+
7945 }
+
7946 }
+
7947 this->interval.start = start;
+
7948 return true;
+
7949
+
7950 error:
+
7951 this->base_type.invalidate();
+
7952 this->sub_type.invalidate();
+
7953 this->charset.invalidate();
+
7954 this->interval.invalidate();
+
7955 return false;
+
7956 }
+
7957
+
7958 virtual void invalidate()
+
7959 {
+
7960 this->base_type.invalidate();
+
7961 this->sub_type.invalidate();
+
7962 this->charset.invalidate();
+
7963 basic_parser::invalidate();
+
7964 }
+
7965
+
7966 public:
+ + + +
7970 };
-
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 };
+
7971
+ + +
7974#ifdef _UNICODE
+
7975 using tmime_type = wmime_type;
+
7976#else
+
7977 using tmime_type = mime_type;
+
7978#endif
+
7979
+
7983 template <class T>
+
+ +
7985 {
+
7986 public:
+
7987 virtual bool match(
+
7988 _In_reads_or_z_opt_(end) const T* text,
+
7989 _In_ size_t start = 0,
+
7990 _In_ size_t end = SIZE_MAX,
+
7991 _In_ int flags = match_default)
+
7992 {
+
7993 _Unreferenced_(flags);
+
7994 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
+
7995 this->interval.end = start;
+
7996 for (;;) {
+
7997 _Assume_(text || this->interval.end >= end);
+
7998 if (this->interval.end >= end || !text[this->interval.end]) {
+ +
8000 this->interval.start = start;
+
8001 return true;
+
8002 }
+
8003 this->interval.invalidate();
+
8004 return false;
+
8005 }
+
8006 if (text[this->interval.end] == '>' ||
+
8007 text[this->interval.end] == '=' ||
+
8008 text[this->interval.end] == '/' && this->interval.end + 1 < end && text[this->interval.end + 1] == '>' ||
+
8009 ctype.is(ctype.space, text[this->interval.end]))
+
8010 {
+
8011 this->interval.start = start;
+
8012 return true;
+
8013 }
+
8014 this->interval.end++;
+
8015 }
+
8016 }
+
8017 };
-
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 };
+
8018
+ + +
8021#ifdef _UNICODE
+
8022 using thtml_ident = whtml_ident;
+
8023#else
+
8024 using thtml_ident = html_ident;
+
8025#endif
+
8026
+
8030 template <class T>
+
+ +
8032 {
+
8033 public:
+
8034 virtual bool match(
+
8035 _In_reads_or_z_opt_(end) const T* text,
+
8036 _In_ size_t start = 0,
+
8037 _In_ size_t end = SIZE_MAX,
+
8038 _In_ int flags = match_default)
+
8039 {
+
8040 _Unreferenced_(flags);
+
8041 this->interval.end = start;
+
8042 _Assume_(text || this->interval.end >= end);
+
8043 if (this->interval.end < end &&
+
8044 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
+
8045 {
+
8046 // "Quoted...
+
8047 T quote = text[this->interval.end];
+
8048 this->content.start = ++this->interval.end;
+
8049 for (;;) {
+
8050 if (this->interval.end >= end || !text[this->interval.end]) {
+
8051 // No end quote!
+
8052 this->content.invalidate();
+
8053 this->interval.invalidate();
+
8054 return false;
+
8055 }
+
8056 if (text[this->interval.end] == quote) {
+
8057 // End quote"
+
8058 this->content.end = this->interval.end;
+
8059 this->interval.start = start;
+
8060 this->interval.end++;
+
8061 return true;
+
8062 }
+
8063 this->interval.end++;
+
8064 }
+
8065 }
+
8066
+
8067 // Nonquoted
+
8068 this->content.start = this->interval.end;
+
8069 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
+
8070 for (;;) {
+
8071 _Assume_(text || this->interval.end >= end);
+
8072 if (this->interval.end >= end || !text[this->interval.end]) {
+
8073 this->content.end = this->interval.end;
+
8074 this->interval.start = start;
+
8075 return true;
+
8076 }
+
8077 if (text[this->interval.end] == '>' ||
+
8078 text[this->interval.end] == '/' && this->interval.end + 1 < end && text[this->interval.end + 1] == '>' ||
+
8079 ctype.is(ctype.space, text[this->interval.end]))
+
8080 {
+
8081 this->content.end = this->interval.end;
+
8082 this->interval.start = start;
+
8083 return true;
+
8084 }
+
8085 this->interval.end++;
+
8086 }
+
8087 }
+
8088
+
8089 virtual void invalidate()
+
8090 {
+
8091 this->content.invalidate();
+
8092 basic_parser::invalidate();
+
8093 }
+
8094
+
8095 public:
+ +
8097 };
-
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
-
- - - -
8132 };
+
8098
+ + +
8101#ifdef _UNICODE
+
8102 using thtml_value = whtml_value;
+
8103#else
+
8104 using thtml_value = html_value;
+
8105#endif
+
8106
+
8110 enum class html_sequence_t {
+
8111 text = 0,
+
8112 element,
+
8113 element_start,
+
8114 element_end,
+
8115 declaration,
+
8116 comment,
+
8117 instruction,
+
8118 PCDATA,
+
8119 CDATA,
+
8120
+
8121 unknown = -1,
+
8122 };
+
8123
+ -
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 };
+
8131
+
8135 template <class T>
+
+ +
8137 {
+
8138 public:
+
8139 basic_html_tag(_In_ const std::locale& locale = std::locale()) :
+
8140 basic_parser(locale),
+
8141 type(html_sequence_t::unknown)
+
8142 {}
+
8143
+
8144 virtual bool match(
+
8145 _In_reads_or_z_opt_(end) const T* text,
+
8146 _In_ size_t start = 0,
+
8147 _In_ size_t end = SIZE_MAX,
+
8148 _In_ int flags = match_multiline)
+
8149 {
+
8150 _Assume_(text || start >= end);
+
8151 if (start >= end || text[start] != '<')
+
8152 goto error;
+
8153 this->interval.end = start + 1;
+
8154 if (this->interval.end >= end || !text[this->interval.end])
+
8155 goto error;
+
8156 if (text[this->interval.end] == '/' &&
+
8157 this->m_ident.match(text, this->interval.end + 1, end, flags))
+
8158 {
+
8159 // </...
+
8160 this->type = html_sequence_t::element_end;
+
8161 this->name = this->m_ident.interval;
+
8162 this->interval.end = this->m_ident.interval.end;
+
8163 }
+
8164 else if (text[this->interval.end] == '!') {
+
8165 // <!...
+
8166 this->interval.end++;
+
8167 if (this->interval.end + 1 < end &&
+
8168 text[this->interval.end] == '-' &&
+
8169 text[this->interval.end + 1] == '-')
+
8170 {
+
8171 // <!--...
+
8172 this->name.start = this->interval.end = this->interval.end + 2;
+
8173 for (;;) {
+
8174 if (this->interval.end >= end || !text[this->interval.end])
+
8175 goto error;
+
8176 if (this->interval.end + 2 < end &&
+
8177 text[this->interval.end] == '-' &&
+
8178 text[this->interval.end + 1] == '-' &&
+
8179 text[this->interval.end + 2] == '>')
+
8180 {
+
8181 // <!--...-->
+
8182 this->type = html_sequence_t::comment;
+
8183 this->name.end = this->interval.end;
+
8184 this->attributes.clear();
+
8185 this->interval.start = start;
+
8186 this->interval.end = this->interval.end + 3;
+
8187 return true;
+
8188 }
+
8189 this->interval.end++;
+
8190 }
+
8191 }
+
8192 this->type = html_sequence_t::declaration;
+
8193 this->name.start = this->name.end = this->interval.end;
+
8194 }
+
8195 else if (text[this->interval.end] == '?') {
+
8196 // <?...
+
8197 this->name.start = ++this->interval.end;
+
8198 for (;;) {
+
8199 if (this->interval.end >= end || !text[this->interval.end])
+
8200 goto error;
+
8201 if (text[this->interval.end] == '>') {
+
8202 // <?...>
+
8203 this->type = html_sequence_t::instruction;
+
8204 this->name.end = this->interval.end;
+
8205 this->attributes.clear();
+
8206 this->interval.start = start;
+
8207 this->interval.end++;
+
8208 return true;
+
8209 }
+
8210 if (this->interval.end + 1 < end &&
+
8211 text[this->interval.end] == '?' &&
+
8212 text[this->interval.end + 1] == '>')
+
8213 {
+
8214 // <?...?>
+
8215 this->type = html_sequence_t::instruction;
+
8216 this->name.end = this->interval.end;
+
8217 this->attributes.clear();
+
8218 this->interval.start = start;
+
8219 this->interval.end = this->interval.end + 2;
+
8220 return true;
+
8221 }
+
8222 this->interval.end++;
+
8223 }
+
8224 }
+
8225 else if (this->m_ident.match(text, this->interval.end, end, flags)) {
+
8226 // <tag...
+
8227 this->type = html_sequence_t::element_start;
+
8228 this->name = this->m_ident.interval;
+
8229 this->interval.end = this->m_ident.interval.end;
+
8230 }
+
8231 else
+
8232 goto error;
+
8233
+
8234 // Skip whitespace.
+
8235 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
+
8236 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
8237
+
8238 this->attributes.clear();
+
8239 for (;;) {
+
8240 if (this->type == html_sequence_t::element_start &&
+
8241 this->interval.end + 1 < end &&
+
8242 text[this->interval.end] == '/' &&
+
8243 text[this->interval.end + 1] == '>')
+
8244 {
+
8245 // <tag .../>
+
8246 this->type = html_sequence_t::element;
+
8247 this->interval.end = this->interval.end + 2;
+
8248 break;
+
8249 }
+
8250 if (this->interval.end < end &&
+
8251 text[this->interval.end] == '>')
+
8252 {
+
8253 // <tag ...>
+
8254 this->interval.end++;
+
8255 break;
+
8256 }
+
8257 if (this->type == html_sequence_t::declaration &&
+
8258 this->interval.end + 1 < end &&
+
8259 text[this->interval.end] == '!' &&
+
8260 text[this->interval.end + 1] == '>')
+
8261 {
+
8262 // "<!...!>".
+
8263 this->interval.end = this->interval.end + 2;
+
8264 break;
+
8265 }
+
8266 if (this->type == html_sequence_t::declaration &&
+
8267 this->interval.end + 1 < end &&
+
8268 text[this->interval.end] == '-' &&
+
8269 text[this->interval.end + 1] == '-')
+
8270 {
+
8271 // "<! ... --...".
+
8272 this->interval.end = this->interval.end + 2;
+
8273 for (;;) {
+
8274 if (this->interval.end >= end || !text[this->interval.end])
+
8275 goto error;
+
8276 if (this->interval.end + 1 < end &&
+
8277 text[this->interval.end] == '-' &&
+
8278 text[this->interval.end + 1] == '-')
+
8279 {
+
8280 // "<! ... --...--".
+
8281 this->interval.end = this->interval.end + 2;
+
8282 break;
+
8283 }
+
8284 this->interval.end++;
+
8285 }
+
8286
+
8287 // Skip whitespace.
+
8288 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
8289 continue;
+
8290 }
+
8291
+
8292 if (this->interval.end >= end || !text[this->interval.end])
+
8293 goto error;
+
8294
+
8295 // Attributes follow...
+
8296 html_attribute* a = nullptr;
+
8297 if (this->m_ident.match(text, this->interval.end, end, flags)) {
+
8298 this->attributes.push_back(std::move(html_attribute{ this->m_ident.interval }));
+
8299 a = &this->attributes.back();
+
8300 _Assume_(a);
+
8301 this->interval.end = this->m_ident.interval.end;
+
8302 }
+
8303 else {
+
8304 // What was that?! Skip.
+
8305 this->interval.end++;
+
8306 continue;
+
8307 }
+
8308
+
8309 // Skip whitespace.
+
8310 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
8311
+
8312 if (this->interval.end < end && text[this->interval.end] == '=') {
+
8313 this->interval.end++;
+
8314
+
8315 // Skip whitespace.
+
8316 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
8317
+
8318 if (this->m_value.match(text, this->interval.end, end, flags)) {
+
8319 // This attribute has value.
+
8320 a->value = this->m_value.content;
+
8321 this->interval.end = this->m_value.interval.end;
+
8322
+
8323 // Skip whitespace.
+
8324 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
8325 }
+
8326 }
+
8327 else {
+
8328 // This attribute has no value.
+
8329 a->value.invalidate();
+
8330 }
+
8331 }
+
8332
+
8333 this->interval.start = start;
+
8334 return true;
+
8335
+
8336 error:
+
8337 this->type = html_sequence_t::unknown;
+
8338 this->name.invalidate();
+
8339 this->attributes.clear();
+
8340 this->interval.invalidate();
+
8341 return false;
+
8342 }
+
8343
+
8344 virtual void invalidate()
+
8345 {
+
8346 this->type = html_sequence_t::unknown;
+
8347 this->name.invalidate();
+
8348 this->attributes.clear();
+
8349 basic_parser::invalidate();
+
8350 }
+
8351
+
8352 public:
+
8353 html_sequence_t type;
+ +
8355 std::vector<html_attribute> attributes;
+
8356
+
8357 protected:
+
8358 basic_html_ident<T> m_ident;
+
8359 basic_html_value<T> m_value;
+
8360 };
-
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++);
+
8361
+ + +
8364#ifdef _UNICODE
+
8365 using thtml_tag = whtml_tag;
+
8366#else
+
8367 using thtml_tag = html_tag;
+
8368#endif
+
8369
+
8373 template <class T>
+
+ +
8375 {
+
8376 public:
+
8377 virtual bool match(
+
8378 _In_reads_or_z_opt_(end) const T* text,
+
8379 _In_ size_t start = 0,
+
8380 _In_ size_t end = SIZE_MAX,
+
8381 _In_ int flags = match_multiline)
+
8382 {
+
8383 _Unreferenced_(flags);
+
8384 _Assume_(text || start + 2 >= end);
+
8385 if (start + 2 < end &&
+
8386 text[start] == '<' &&
+
8387 text[start + 1] == '!' &&
+
8388 text[start + 2] == '[')
+
8389 {
+
8390 this->interval.end = start + 3;
+
8391
+
8392 // Skip whitespace.
+
8393 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
+
8394 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
+
8395
+
8396 this->condition.start = this->condition.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 };
+
8398 for (;;) {
+
8399 if (this->interval.end >= end || !text[this->interval.end])
+
8400 break;
+
8401 if (text[this->interval.end] == '[') {
+
8402 this->interval.start = start;
+
8403 this->interval.end++;
+
8404 return true;
+
8405 }
+
8406 if (ctype.is(ctype.space, text[this->interval.end]))
+
8407 this->interval.end++;
+
8408 else
+
8409 this->condition.end = ++this->interval.end;
+
8410 }
+
8411 }
+
8412
+
8413 this->condition.invalidate();
+
8414 this->interval.invalidate();
+
8415 return false;
+
8416 }
+
8417
+
8418 virtual void invalidate()
+
8419 {
+
8420 this->condition.invalidate();
+
8421 basic_parser::invalidate();
+
8422 }
+
8423
+
8424 public:
+
8425 stdex::interval<size_t> condition;
+
8426 };
-
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 };
+
8427
+ + +
8430#ifdef _UNICODE
+ +
8432#else
+ +
8434#endif
+
8435
+
8439 template <class T>
+
+ +
8441 {
+
8442 public:
+
8443 virtual bool match(
+
8444 _In_reads_or_z_opt_(end) const T* text,
+
8445 _In_ size_t start = 0,
+
8446 _In_ size_t end = SIZE_MAX,
+
8447 _In_ int flags = match_multiline)
+
8448 {
+
8449 _Unreferenced_(flags);
+
8450 _Assume_(text || start + 2 >= end);
+
8451 if (start + 2 < end &&
+
8452 text[start] == ']' &&
+
8453 text[start + 1] == ']' &&
+
8454 text[start + 2] == '>')
+
8455 {
+
8456 this->interval.start = start;
+
8457 this->interval.end = start + 3;
+
8458 return true;
+
8459 }
+
8460 this->interval.invalidate();
+
8461 return false;
+
8462 }
+
8463 };
-
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
+
8464
+ + +
8467#ifdef _UNICODE
+ +
8469#else
+ +
8471#endif
+
8472 }
+
8473}
+
8474
+
8475#undef ENUM_FLAG_OPERATOR
+
8476#undef ENUM_FLAGS
+
8477
+
8478#ifdef _MSC_VER
+
8479#pragma warning(pop)
+
8480#endif
+
Test for angle in d°mm'ss.dddd form.
Definition parser.hpp:4396
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 chemical formula.
Definition parser.hpp:5540
+
Test for Creditor Reference.
Definition parser.hpp:4966
+
T reference[22]
Normalized national reference number.
Definition parser.hpp:5095
+
T check_digits[3]
Two check digits.
Definition parser.hpp:5094
+
bool is_valid
Is reference valid per ISO 7064.
Definition parser.hpp:5096
+
Legacy CSS comment end -->
Definition parser.hpp:7549
+
Legacy CSS comment start <!--
Definition parser.hpp:7511
+
CSS comment.
Definition parser.hpp:7451
+
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7495
+
CSS import directive.
Definition parser.hpp:7764
+
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7833
+
CSS string.
Definition parser.hpp:7586
+
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7637
+
URI in CSS.
Definition parser.hpp:7653
+
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7748
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 date.
Definition parser.hpp:4026
+
Test for valid DNS domain character.
Definition parser.hpp:2807
+
bool allow_on_edge
Is character allowed at the beginning or an end of a DNS domain?
Definition parser.hpp:2845
+
Test for DNS domain/hostname.
Definition parser.hpp:2907
+
bool m_allow_absolute
May DNS names end with a dot (absolute name)?
Definition parser.hpp:2971
+
Test for e-mail address.
Definition parser.hpp:3795
+
Test for emoticon.
Definition parser.hpp:3903
+
std::shared_ptr< basic_parser< T > > apex
apex/eyebrows/halo (e.g. O, 0)
Definition parser.hpp:3992
+
std::shared_ptr< basic_parser< T > > eyes
eyes (e.g. :, ;, >, |, B)
Definition parser.hpp:3993
+
std::shared_ptr< basic_set< T > > mouth
mouth (e.g. ), ), (, (, |, P, D, p, d)
Definition parser.hpp:3995
+
std::shared_ptr< basic_parser< T > > nose
nose (e.g. -, o)
Definition parser.hpp:3994
+
std::shared_ptr< basic_parser< T > > emoticon
emoticon as a whole (e.g. 😀, 🤔, 😶)
Definition parser.hpp:3991
Test for end of line.
Definition parser.hpp: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
+
End of condition ...]]>
Definition parser.hpp:8441
+
Start of condition <![condition[...
Definition parser.hpp:8375
+
Contiguous sequence of characters representing name of element, attribute etc.
Definition parser.hpp:7985
+
Tag.
Definition parser.hpp:8137
+
std::vector< html_attribute > attributes
tag attributes
Definition parser.hpp:8355
+
html_sequence_t type
tag type
Definition parser.hpp:8353
+
stdex::interval< size_t > name
tag name position in source
Definition parser.hpp:8354
+
Optionally-quoted string representing value of an attribute.
Definition parser.hpp:8032
+
stdex::interval< size_t > content
content position in source
Definition parser.hpp:8096
+
Test for International Bank Account Number.
Definition parser.hpp:4672
+
T bban[31]
Normalized Basic Bank Account Number.
Definition parser.hpp:4943
+
T country[3]
ISO 3166-1 alpha-2 country code.
Definition parser.hpp:4941
+
T check_digits[3]
Two check digits.
Definition parser.hpp:4942
+
bool is_valid
Is IBAN valid per ISO 7064.
Definition parser.hpp:4944
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
@@ -8499,20 +8497,20 @@ $(document).ready(function() { init_codefold(0); });
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
+
std::shared_ptr< basic_parser< T > > scope_id
Scope ID (e.g. NIC index with link-local addresses)
Definition parser.hpp:2770
+
stdex::interval< size_t > components[8]
Individual component intervals.
Definition parser.hpp:2768
+
struct in6_addr value
IPv6 address value.
Definition parser.hpp:2769
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 JSON string.
Definition parser.hpp:7298
+
MIME content type.
Definition parser.hpp:7849
+
stdex::interval< size_t > base_type
basic type position in source
Definition parser.hpp:7967
+
stdex::interval< size_t > sub_type
sub-type position in source
Definition parser.hpp:7968
+
stdex::interval< size_t > charset
charset position in source
Definition parser.hpp:7969
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
@@ -8531,8 +8529,8 @@ $(document).ready(function() { init_codefold(0); });
Base template for all parsers.
Definition parser.hpp:74
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 phone number.
Definition parser.hpp:4519
+
std::basic_string< T > value
Normalized phone number.
Definition parser.hpp:4645
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
@@ -8550,14 +8548,14 @@ $(document).ready(function() { init_codefold(0); });
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 SI Reference delimiter.
Definition parser.hpp:5163
+
Test for SI Reference part.
Definition parser.hpp:5118
+
Test for SI Reference.
Definition parser.hpp:5201
+
basic_si_reference_part< T > part3
Reference data part 3 (P3)
Definition parser.hpp:5518
+
basic_si_reference_part< T > part1
Reference data part 1 (P1)
Definition parser.hpp:5516
+
bool is_valid
Is reference valid.
Definition parser.hpp:5519
+
T model[3]
Reference model.
Definition parser.hpp:5515
+
basic_si_reference_part< T > part2
Reference data part 2 (P2)
Definition parser.hpp:5517
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
@@ -8567,77 +8565,77 @@ $(document).ready(function() { init_codefold(0); });
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
+
Test for time.
Definition parser.hpp:4293
+
Test for valid URL password character.
Definition parser.hpp:3089
+
Test for valid URL path character.
Definition parser.hpp:3189
+
Test for URL path.
Definition parser.hpp:3297
+
Test for valid URL username character.
Definition parser.hpp:2990
+
Test for URL.
Definition parser.hpp:3438
+
Test for HTTP agent.
Definition parser.hpp:6825
+
Test for HTTP any type.
Definition parser.hpp:5947
+
Test for HTTP asterisk.
Definition parser.hpp:6589
+ + + + + +
Test for HTTP header.
Definition parser.hpp:7145
+
Test for HTTP language (RFC1766)
Definition parser.hpp:6457
+
Test for HTTP line break (RFC2616: CRLF | LF)
Definition parser.hpp:5621
+
Test for HTTP media range (RFC2616: media-range)
Definition parser.hpp:5979
+
Test for HTTP media type (RFC2616: media-type)
Definition parser.hpp:6034
+
Test for HTTP parameter (RFC2616: parameter)
Definition parser.hpp:5892
+
http_token name
Parameter name.
Definition parser.hpp:5936
+
http_value value
Parameter value.
Definition parser.hpp:5937
+
Test for HTTP protocol.
Definition parser.hpp:6900
+
uint16_t version
HTTP protocol version: 0x100 = 1.0, 0x101 = 1.1...
Definition parser.hpp:7001
+
Test for HTTP quoted string (RFC2616: quoted-string)
Definition parser.hpp:5782
+
stdex::interval< size_t > content
String content (without quotes)
Definition parser.hpp:5838
+
Test for HTTP request.
Definition parser.hpp:7008
+
Test for HTTP space (RFC2616: LWS)
Definition parser.hpp:5657
+
Test for HTTP text character (RFC2616: TEXT)
Definition parser.hpp:5694
+
Test for HTTP token (RFC2616: token - tolerates non-ASCII)
Definition parser.hpp:5728
+
Test for HTTP URL parameter.
Definition parser.hpp:6274
+
Test for HTTP URL path segment.
Definition parser.hpp:6185
+
Test for HTTP URL path segment.
Definition parser.hpp:6218
+
std::vector< http_url_path_segment > segments
Path segments.
Definition parser.hpp:6267
+
Test for HTTP URL port.
Definition parser.hpp:6129
+
Test for HTTP URL server.
Definition parser.hpp:6092
+
Test for HTTP URL.
Definition parser.hpp:6355
+
Collection of HTTP values.
Definition parser.hpp:7254
+
Test for HTTP value (RFC2616: value)
Definition parser.hpp:5848
+
http_quoted_string string
Value when matched as quoted string.
Definition parser.hpp:5884
+
http_token token
Value when matched as token.
Definition parser.hpp:5885
+
Test for HTTP weight factor.
Definition parser.hpp:6520
+
float value
Calculated value of the weight factor.
Definition parser.hpp:6582
+
Test for HTTP weighted value.
Definition parser.hpp:6612
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 DNS domain SGML character.
Definition parser.hpp:2863
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
+
Test for valid URL password SGML character.
Definition parser.hpp:3141
+
Test for valid URL path SGML character.
Definition parser.hpp:3245
+
Test for valid URL username SGML character.
Definition parser.hpp:3041
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
-
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
+
Tag attribute.
Definition parser.hpp:8127
+
stdex::interval< size_t > name
attribute name position in source
Definition parser.hpp:8128
+
stdex::interval< size_t > value
attribute value position in source
Definition parser.hpp:8129
+
Definition parser.hpp:7280
diff --git a/pch_8hpp_source.html b/pch_8hpp_source.html index ca3f0fb07..75273ef15 100644 --- a/pch_8hpp_source.html +++ b/pch_8hpp_source.html @@ -124,7 +124,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/pool_8hpp_source.html b/pool_8hpp_source.html index ea9b21a09..3bd26c93e 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 c67706170..a21df4f2e 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 9b2ec5982..98c4211ed 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 167f233e6..6c9e2aa3b 100644 --- a/ring_8hpp_source.html +++ b/ring_8hpp_source.html @@ -223,7 +223,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/sgml_8cpp_source.html b/sgml_8cpp_source.html index f0003e926..d534d58ba 100644 --- a/sgml_8cpp_source.html +++ b/sgml_8cpp_source.html @@ -153,7 +153,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/sgml_8hpp_source.html b/sgml_8hpp_source.html index abee92612..1fa5e6484 100644 --- a/sgml_8hpp_source.html +++ b/sgml_8hpp_source.html @@ -710,7 +710,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/sgml__unicode_8hpp_source.html b/sgml__unicode_8hpp_source.html index 1f1dea6ba..c35ad809f 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 ea46db4e1..a00ea65a7 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 b51702c51..b96076af9 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 1766fb217..e3d853af4 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 8a7fdbf5d..a14aca430 100644 --- a/stream_8hpp_source.html +++ b/stream_8hpp_source.html @@ -4225,7 +4225,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/string_8hpp_source.html b/string_8hpp_source.html index ab3f39e5a..e2dfe935b 100644 --- a/string_8hpp_source.html +++ b/string_8hpp_source.html @@ -1464,7 +1464,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/structstdex_1_1chrono_1_1aosn__date-members.html b/structstdex_1_1chrono_1_1aosn__date-members.html index 86bdd63d8..08414be18 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 6c13f9e78..f2cc51288 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 7d031459a..9d63b042e 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 7f2f0a1ea..8f5a2b73e 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 3801398dd..8dcdb9d15 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 8d1c3a7a2..d6b427e73 100644 --- a/structstdex_1_1free__locale__delete.html +++ b/structstdex_1_1free__locale__delete.html @@ -101,7 +101,7 @@ void operator() (local
diff --git a/structstdex_1_1html_1_1element__traits-members.html b/structstdex_1_1html_1_1element__traits-members.html index f963950ba..bfed59def 100644 --- a/structstdex_1_1html_1_1element__traits-members.html +++ b/structstdex_1_1html_1_1element__traits-members.html @@ -102,7 +102,7 @@ $(function() {
diff --git a/structstdex_1_1html_1_1element__traits.html b/structstdex_1_1html_1_1element__traits.html index 91a6d7959..d16d53be9 100644 --- a/structstdex_1_1html_1_1element__traits.html +++ b/structstdex_1_1html_1_1element__traits.html @@ -858,7 +858,7 @@ template<class T >
diff --git a/structstdex_1_1html_1_1entity-members.html b/structstdex_1_1html_1_1entity-members.html index 292ec1d11..45746f256 100644 --- a/structstdex_1_1html_1_1entity-members.html +++ b/structstdex_1_1html_1_1entity-members.html @@ -85,7 +85,7 @@ $(function() {
diff --git a/structstdex_1_1html_1_1entity.html b/structstdex_1_1html_1_1entity.html index 6194c4488..27f070580 100644 --- a/structstdex_1_1html_1_1entity.html +++ b/structstdex_1_1html_1_1entity.html @@ -106,7 +106,7 @@ struct stdex::html::entity< _Elem, _Traits, _Alloc >

HTML entity.

diff --git a/structstdex_1_1html_1_1inserted__token-members.html b/structstdex_1_1html_1_1inserted__token-members.html index 317637f46..6b5b5eb11 100644 --- a/structstdex_1_1html_1_1inserted__token-members.html +++ b/structstdex_1_1html_1_1inserted__token-members.html @@ -87,7 +87,7 @@ $(function() {
diff --git a/structstdex_1_1html_1_1inserted__token.html b/structstdex_1_1html_1_1inserted__token.html index 4190a0a7f..369ed9a9e 100644 --- a/structstdex_1_1html_1_1inserted__token.html +++ b/structstdex_1_1html_1_1inserted__token.html @@ -113,7 +113,7 @@ bool after_word diff --git a/structstdex_1_1interval-members.html b/structstdex_1_1interval-members.html index 91d1c6d16..d7ead532e 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 0f1754e7b..40d70afba 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 dd719aea5..6b768a0d4 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 98c8d7646..ed4a56826 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 9591e4773..873c7bf26 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 0fddfe8df..e5a172dc6 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 1b8ec9952..0ce185d12 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 10bb3a829..75da0b1c1 100644 --- a/structstdex_1_1no__delete_3_01_t_0f_0e_4.html +++ b/structstdex_1_1no__delete_3_01_t_0f_0e_4.html @@ -106,7 +106,7 @@ struct stdex::no_delete< T[]>

Noop array deleter.

diff --git a/structstdex_1_1parser_1_1html__attribute-members.html b/structstdex_1_1parser_1_1html__attribute-members.html index b3136c592..f50e5114a 100644 --- a/structstdex_1_1parser_1_1html__attribute-members.html +++ b/structstdex_1_1parser_1_1html__attribute-members.html @@ -85,7 +85,7 @@ $(function() {
diff --git a/structstdex_1_1parser_1_1html__attribute.html b/structstdex_1_1parser_1_1html__attribute.html index f70c0db53..2638ed273 100644 --- a/structstdex_1_1parser_1_1html__attribute.html +++ b/structstdex_1_1parser_1_1html__attribute.html @@ -105,7 +105,7 @@ Public Attributes
diff --git a/structstdex_1_1parser_1_1http__factor__more-members.html b/structstdex_1_1parser_1_1http__factor__more-members.html index 16da8dc9e..b78355ec3 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 4b020a569..69e2f7d05 100644 --- a/structstdex_1_1parser_1_1http__factor__more.html +++ b/structstdex_1_1parser_1_1http__factor__more.html @@ -93,7 +93,7 @@ Public Member Functions
diff --git a/structstdex_1_1stream_1_1buffer_1_1buffer__t-members.html b/structstdex_1_1stream_1_1buffer_1_1buffer__t-members.html index 17df87d6d..ca64013a1 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 327479fe8..c75ddda9c 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 8ffc7f099..abe0db72c 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 a2e7b1b99..84d4e56ec 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 5f2069618..f6e57a417 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 fde4bd96c..2bf356ee8 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 080632ccc..e566ffa6f 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 cc2c25a8b..45febfe20 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 af5e99d13..bf4e0fd0b 100644 --- a/unicode_8cpp_source.html +++ b/unicode_8cpp_source.html @@ -181,7 +181,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/unicode_8hpp_source.html b/unicode_8hpp_source.html index 700163197..2152c3710 100644 --- a/unicode_8hpp_source.html +++ b/unicode_8hpp_source.html @@ -709,7 +709,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/unionstdex_1_1md2__t-members.html b/unionstdex_1_1md2__t-members.html index a60e6ff5f..1de071597 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 d2f5646d8..a6d18d6c5 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 0095e63ad..4c38d4db4 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 6389b26ab..bd81cfeb3 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 a19c35378..813a1a3b8 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 349c4d1be..429bf6e54 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 1072d50f3..d6a649ce1 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 01ebe430a..b0c2b5101 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 52649990f..6ebc4635e 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 e3e6e3716..9674a5827 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 f7f8e5518..03e6e843f 100644 --- a/windows_8h_source.html +++ b/windows_8h_source.html @@ -109,7 +109,7 @@ $(document).ready(function() { init_codefold(0); });