aboutsummaryrefslogtreecommitdiff
path: root/src/CharacterSet.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/CharacterSet.hpp')
-rw-r--r--src/CharacterSet.hpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/CharacterSet.hpp b/src/CharacterSet.hpp
new file mode 100644
index 0000000..e93976f
--- /dev/null
+++ b/src/CharacterSet.hpp
@@ -0,0 +1,122 @@
+#ifndef URI_CHARACTER_SET_HPP
+#define URI_CHARACTER_SET_HPP
+
+/**
+ * @file CharacterSet.hpp
+ *
+ * This module declares the Uri::IsCharacterInSet function
+ * and the CharacterSet class.
+ *
+ * © 2018 by Richard Walters
+ */
+
+#include <initializer_list>
+#include <memory>
+
+namespace Uri {
+
+ /**
+ * This represents a set of characters which can be queried
+ * to find out if a character is in the set or not.
+ */
+ class CharacterSet {
+ // Lifecycle management
+ public:
+ ~CharacterSet();
+ CharacterSet(const CharacterSet&);
+ CharacterSet(CharacterSet&&);
+ CharacterSet& operator=(const CharacterSet&);
+ CharacterSet& operator=(CharacterSet&&);
+
+ // Methods
+ public:
+ /**
+ * This is the default constructor.
+ */
+ CharacterSet();
+
+ /**
+ * This constructs a character set that contains
+ * just the given character.
+ *
+ * @param[in] c
+ * This is the only character to put in the set.
+ */
+ CharacterSet(char c);
+
+ /**
+ * This constructs a character set that contains all the
+ * characters between the given "first" and "last"
+ * characters, inclusive.
+ *
+ * @param[in] first
+ * This is the first of the range of characters
+ * to put in the set.
+ *
+ * @param[in] last
+ * This is the last of the range of characters
+ * to put in the set.
+ */
+ CharacterSet(char first, char last);
+
+ /**
+ * This constructs a character set that contains all the
+ * characters in all the other given character sets.
+ *
+ * @param[in] characterSets
+ * These are the character sets to include.
+ */
+ CharacterSet(
+ std::initializer_list< const CharacterSet > characterSets
+ );
+
+ /**
+ * This method checks to see if the given character
+ * is in the character set.
+ *
+ * @param[in] c
+ * This is the character to check.
+ *
+ * @return
+ * An indication of whether or not the given character
+ * is in the character set is returned.
+ */
+ bool Contains(char c) const;
+
+ // Private Properties
+ private:
+ /**
+ * This is the type of structure that contains the private
+ * properties of the instance. It is defined in the implementation
+ * and declared here to ensure that it is scoped inside the class.
+ */
+ struct Impl;
+
+ /**
+ * This contains the private properties of the instance.
+ */
+ std::unique_ptr< struct Impl > impl_;
+ };
+
+ /**
+ * This function determines whether or not the given character
+ * is in the given character set.
+ *
+ * @param[in] c
+ * This is the character to check.
+ *
+ * @param[in] characterSet
+ * This is the set of characters that are allowed.
+ *
+ * @return
+ * An indication of whether or not the given character
+ * is in the given character set is returned.
+ */
+ bool IsCharacterInSet(
+ char c,
+ const CharacterSet& characterSet
+ );
+
+}
+
+#endif /* URI_CHARACTER_SET_HPP */