aboutsummaryrefslogtreecommitdiff
path: root/src/PercentEncodedCharacterDecoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/PercentEncodedCharacterDecoder.cpp')
-rw-r--r--src/PercentEncodedCharacterDecoder.cpp103
1 files changed, 0 insertions, 103 deletions
diff --git a/src/PercentEncodedCharacterDecoder.cpp b/src/PercentEncodedCharacterDecoder.cpp
deleted file mode 100644
index 442befe..0000000
--- a/src/PercentEncodedCharacterDecoder.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * @file PercentEncodedCharacterDecoder.cpp
- *
- * This module contains the implementation of the
- * Uri::PercentEncodedCharacterDecoder class.
- *
- * © 2018 by Richard Walters
- */
-
-#include "CharacterSet.hpp"
-#include "PercentEncodedCharacterDecoder.hpp"
-
-namespace {
-
- /**
- * This is the character set containing just numbers.
- */
- const Uri::CharacterSet DIGIT('0', '9');
-
- /**
- * This is the character set containing just the upper-case
- * letters 'A' through 'F', used in upper-case hexadecimal.
- */
- const Uri::CharacterSet HEX_UPPER('A', 'F');
-
- /**
- * This is the character set containing just the lower-case
- * letters 'a' through 'f', used in lower-case hexadecimal.
- */
- const Uri::CharacterSet HEX_LOWER('a', 'f');
-
-}
-
-namespace Uri {
-
- struct PercentEncodedCharacterDecoder::Impl {
- // Properties
-
- /**
- * This is the decoded character.
- */
- int decodedCharacter = 0;
-
- /**
- * This is the number of digits that we still need to shift in
- * to decode the character.
- */
- size_t digitsLeft = 2;
-
- // Methods
-
- /**
- * This method shifts in the given hex digit as part of
- * building the decoded character.
- *
- * @param[in] c
- * This is the hex digit to shift into the decoded character.
- *
- * @return
- * An indication of whether or not the given hex digit
- * was valid is returned.
- */
- bool ShiftInHexDigit(char c) {
- decodedCharacter <<= 4;
- if (DIGIT.Contains(c)) {
- decodedCharacter += (int)(c - '0');
- } else if (HEX_UPPER.Contains(c)) {
- decodedCharacter += (int)(c - 'A') + 10;
- } else if (HEX_LOWER.Contains(c)) {
- decodedCharacter += (int)(c - 'a') + 10;
- } else {
- return false;
- }
- return true;
- }
- };
-
- PercentEncodedCharacterDecoder::~PercentEncodedCharacterDecoder() noexcept = default;
- PercentEncodedCharacterDecoder::PercentEncodedCharacterDecoder(PercentEncodedCharacterDecoder&&) noexcept = default;
- PercentEncodedCharacterDecoder& PercentEncodedCharacterDecoder::operator=(PercentEncodedCharacterDecoder&&) noexcept = default;
-
- PercentEncodedCharacterDecoder::PercentEncodedCharacterDecoder()
- : impl_(new Impl)
- {
- }
-
- bool PercentEncodedCharacterDecoder::NextEncodedCharacter(char c) {
- if (!impl_->ShiftInHexDigit(c)) {
- return false;
- }
- --impl_->digitsLeft;
- return true;
- }
-
- bool PercentEncodedCharacterDecoder::Done() const {
- return (impl_->digitsLeft == 0);
- }
-
- char PercentEncodedCharacterDecoder::GetDecodedCharacter() const {
- return (char)impl_->decodedCharacter;
- }
-
-}