.. _program_listing_file_uri-template_Modifier.h: Program Listing for File Modifier.h =================================== |exhale_lsh| :ref:`Return to documentation for file ` (``uri-template/Modifier.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include #include namespace URI { namespace Template { enum class ModifierType { NONE, LENGTH, EXPLODE }; class Modifier { public: virtual ~Modifier() = default; virtual ModifierType Type() const = 0; virtual char Start() const = 0; }; class ModNoop: public Modifier { public: ModNoop() = default; virtual ~ModNoop() = default; virtual ModifierType Type() const override; virtual char Start() const override; }; class ModLength: public Modifier { public: ModLength() = default; virtual ~ModLength() = default; virtual ModifierType Type() const override; virtual char Start() const override; static bool IsDigit(char c); static unsigned ToNumber(const std::string& num_str); }; class ModExplode: public Modifier { public: ModExplode() = default; virtual ~ModExplode() = default; virtual ModifierType Type() const override; virtual char Start() const override; }; inline const std::shared_ptr NOOP_MODIFIER = std::make_shared(); inline const std::vector> KNOWN_MODIFIERS = { std::make_shared(), std::make_shared(), }; } // namespace Template } // namespace URI