diff options
author | albert <albert@yandex-team.ru> | 2022-02-10 16:48:15 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:48:15 +0300 |
commit | a817f5de12611ec73085eba17f8ec7740a46bdb7 (patch) | |
tree | b222e5ac2e2e98872661c51ccceee5da0d291e13 /library/cpp/uri/parse.h | |
parent | 9f25ef3232c288ca664ceee6c376cf64e4349a2e (diff) | |
download | ydb-a817f5de12611ec73085eba17f8ec7740a46bdb7.tar.gz |
Restoring authorship annotation for <albert@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/uri/parse.h')
-rw-r--r-- | library/cpp/uri/parse.h | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/library/cpp/uri/parse.h b/library/cpp/uri/parse.h index 0d2ce86ddf4..ca2358e5728 100644 --- a/library/cpp/uri/parse.h +++ b/library/cpp/uri/parse.h @@ -1,20 +1,20 @@ -#pragma once +#pragma once -// #define DO_PRN +// #define DO_PRN -#include <cstddef> +#include <cstddef> -#include "common.h" +#include "common.h" #include <library/cpp/charset/doccodes.h> -#include <util/generic/strbuf.h> -#include <util/stream/output.h> -#include <util/string/cast.h> -#include <util/system/yassert.h> +#include <util/generic/strbuf.h> +#include <util/stream/output.h> +#include <util/string/cast.h> +#include <util/system/yassert.h> -namespace NUri { +namespace NUri { class TParser; - + namespace NParse { class TRange { public: @@ -23,7 +23,7 @@ namespace NUri { ui64 FlagsAllPlaintext; ui32 Encode; ui32 Decode; - + public: TRange(const char* beg = nullptr) : Beg(beg) @@ -33,51 +33,51 @@ namespace NUri { , Decode(0) { } - + void Reset(const char* beg = nullptr) { *this = TRange(beg); } - + void AddRange(const TRange& range, ui64 mask); - + void AddFlag(const char* ptr, ui64 mask, ui64 flag) { if (0 != flag) AddFlagImpl(ptr, mask, flag, flag); } - + void AddFlagExcept(const char* ptr, ui64 mask, ui64 flag, ui64 exclflag) { if (0 != flag) AddFlagImpl(ptr, mask, flag & ~exclflag, flag); } - + void AddFlagUnless(const char* ptr, ui64 mask, ui64 flag, ui64 exclmask) { if (0 != flag) AddFlagImpl(ptr, mask, flag, flag, exclmask); } - + void AddFlag(const char* ptr, ui64 mask, ui64 flag, ui64 exclflag, ui64 exclmask) { if (0 != flag) AddFlagImpl(ptr, mask, flag & ~exclflag, flag, exclmask); } - + private: void AddFlagImpl(const char* ptr, ui64 mask, ui64 plainflag, ui64 encflag) { AddFlagAllPlaintextImpl(ptr, plainflag); AddFlagEncodeMaskedImpl(encflag & mask); } - + void AddFlagImpl(const char* ptr, ui64 mask, ui64 plainflag, ui64 encflag, ui64 exclmask) { AddFlagAllPlaintextImpl(ptr, plainflag); if (0 == (mask & exclmask)) AddFlagEncodeMaskedImpl(encflag & mask); } - + void AddFlagAllPlaintextImpl(const char* ptr, ui64 flag) { if (nullptr == Beg) Beg = ptr; FlagsAllPlaintext |= flag; } - + void AddFlagEncodeMaskedImpl(ui64 flag) { if (0 == flag) return; @@ -88,36 +88,36 @@ namespace NUri { ++Decode; } }; - - } - + + } + class TSection : protected NParse::TRange { private: friend class TParser; - + private: const char* End; - + TSection(const char* beg = nullptr) : NParse::TRange(beg) , End(nullptr) { } - + void Reset() { Enter(nullptr); } - + void Reset(const char* pc) { Y_ASSERT(!Beg || !pc || Beg < pc); Reset(); } - + void Enter(const char* pc) { *this = TSection(pc); } - + bool Leave(const char* pc) { Y_ASSERT(Beg); End = pc; @@ -133,40 +133,40 @@ namespace NUri { bool IsSet() const { return End; } - + TStringBuf Get() const { return TStringBuf(Beg, End); } - + size_t Len() const { return End - Beg; } - + size_t DecodedLen() const { return Len() - 2 * Decode; } - + size_t EncodedLen() const { return 2 * Encode + DecodedLen(); } - + ui32 GetEncode() const { return Encode; } - + ui32 GetDecode() const { return Decode; } - + ui64 GetFlagsEncode() const { return FlagsEncodeMasked; } - + ui64 GetFlagsAllPlaintext() const { return FlagsAllPlaintext; } }; - + class TParser { public: TSection Sections[TField::FieldUrlMAX]; @@ -175,7 +175,7 @@ namespace NUri { const TStringBuf UriStr; TState::EParsed State; ECharset Enc; - + public: TParser(const TParseFlags& flags, const TStringBuf& uri, ECharset enc = CODES_UTF8) : Scheme(TScheme::SchemeEmpty) @@ -218,97 +218,97 @@ namespace NUri { ui64 GetFieldFlags(TField::EField fld) const { return GetFieldFlags(fld, Flags); } - + protected: static const TParseFlags FieldFlags[TField::FieldUrlMAX]; TSection::TRange CurRange; unsigned HexValue; const char* PctBegin; - -#ifdef DO_PRN + +#ifdef DO_PRN IOutputStream& PrintAddr(const char* ptr) const { return Cdbg << "[" << IntToString<16>(ui64(ptr)) << "] "; } - + IOutputStream& PrintHead(const char* ptr, const char* func) const { return PrintAddr(ptr) << func << " "; } - + IOutputStream& PrintHead(const char* ptr, const char* func, const TField::EField& fld) const { return PrintHead(ptr, func) << fld; } - + IOutputStream& PrintTail(const TStringBuf& val) const { return Cdbg << " [" << val << "]" << Endl; } IOutputStream& PrintTail(const char* beg, const char* end) const { return PrintTail(TStringBuf(beg, end)); } -#endif - +#endif + void ResetSection(TField::EField fld, const char* pc = nullptr) { -#ifdef DO_PRN +#ifdef DO_PRN PrintHead(pc, __FUNCTION__, fld); PrintTail(pc); -#endif +#endif Sections[fld].Reset(pc); } void storeSection(const TStringBuf& val, TField::EField fld) { -#ifdef DO_PRN +#ifdef DO_PRN PrintHead(val.data(), __FUNCTION__, fld); PrintTail(val); -#endif +#endif Sections[fld].Set(val); } - + void startSection(const char* pc, TField::EField fld) { -#ifdef DO_PRN +#ifdef DO_PRN PrintHead(pc, __FUNCTION__, fld); PrintTail(pc); -#endif +#endif copyRequirements(pc); Sections[fld].Enter(pc); } void finishSection(const char* pc, TField::EField fld) { -#ifdef DO_PRN +#ifdef DO_PRN PrintHead(pc, __FUNCTION__, fld); PrintTail(pc); -#endif +#endif if (Sections[fld].Leave(pc)) copyRequirements(pc); } void setRequirement(const char* ptr, ui64 flags) { -#ifdef DO_PRN +#ifdef DO_PRN PrintHead(ptr, __FUNCTION__) << IntToString<16>(flags) << " & mask=" << IntToString<16>(Flags.Allow | Flags.Extra); PrintTail(ptr); -#endif +#endif CurRange.AddFlag(ptr, Flags.Allow | Flags.Extra, flags); } - + void setRequirementExcept(const char* ptr, ui64 flags, ui64 exclflag) { -#ifdef DO_PRN +#ifdef DO_PRN PrintHead(ptr, __FUNCTION__) << IntToString<16>(flags) << " & exclflag=" << IntToString<16>(exclflag) << " & mask=" << IntToString<16>(Flags.Allow | Flags.Extra); PrintTail(ptr); -#endif +#endif CurRange.AddFlagExcept(ptr, Flags.Allow | Flags.Extra, flags, exclflag); } - + void setRequirementUnless(const char* ptr, ui64 flags, ui64 exclmask) { -#ifdef DO_PRN +#ifdef DO_PRN PrintHead(ptr, __FUNCTION__) << IntToString<16>(flags) << " & exclmask=" << IntToString<16>(exclmask) << " & mask=" << IntToString<16>(Flags.Allow | Flags.Extra); PrintTail(ptr); -#endif +#endif CurRange.AddFlagUnless(ptr, Flags.Allow | Flags.Extra, flags, exclmask); } - + void copyRequirementsImpl(const char* ptr); void copyRequirements(const char* ptr) { PctEnd(ptr); @@ -347,7 +347,7 @@ namespace NUri { HexReset(); PctBegin = ptr; } - + void checkSectionCollision(TField::EField fld1, TField::EField fld2) { if (Sections[fld1].IsSet() && Sections[fld2].IsSet() && Sections[fld1].Beg == Sections[fld2].Beg) { Sections[fld1].Reset(); @@ -357,5 +357,5 @@ namespace NUri { bool doParse(const char* str_beg, size_t length); TState::EParsed ParseImpl(); }; - + } |