Răsfoiți Sursa

Add base64 encoding (incomplete)

Patrick-Christopher Mattulat 3 ani în urmă
părinte
comite
e5d55046ac

+ 2 - 1
CMakeLists.txt

@@ -89,7 +89,8 @@ set(SOURCE_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/io/kv/KvPair.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/io/kv/KvDocument.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/io/kv/KvParser.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/io/kv/KvFileReader.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/io/kv/KvFileReader.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/encoding/base64/Base64.cpp)
 
 if (${LS_STD_BUILD_WITH_TESTS})
     set(TEST_FILES

+ 26 - 0
include/ls_std/encoding/IEncoding.hpp

@@ -0,0 +1,26 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2022-01-03
+ * Changed:         2022-01-03
+ *
+ * */
+
+#ifndef LS_STD_I_ENCODING_HPP
+#define LS_STD_I_ENCODING_HPP
+
+#include <string>
+
+namespace ls_std
+{
+  class IEncoding
+  {
+    public:
+
+      virtual std::string encode(const std::string& _sequence) = 0;
+      virtual std::string decode(const std::string& _sequence) = 0;
+  };
+}
+
+#endif

+ 46 - 0
include/ls_std/encoding/base64/Base64.hpp

@@ -0,0 +1,46 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2022-01-03
+ * Changed:         2022-01-03
+ *
+ * */
+
+#ifndef LS_STD_BASE64_HPP
+#define LS_STD_BASE64_HPP
+
+#include <ls_std/encoding/IEncoding.hpp>
+#include <vector>
+
+namespace ls_std
+{
+  class Base64 : public ls_std::IEncoding
+  {
+    public:
+
+      Base64() = default;
+      ~Base64() = default;
+
+      std::string encode(const std::string &_sequence) override;
+      std::string decode(const std::string &_sequence) override;
+
+    private:
+
+      const std::vector<char> table
+      {
+        'A','B','C','D','E','F','G','H',
+        'I','J','K','L','M','N','O','P',
+        'Q','R','S','T','U','V','W','X',
+        'Y','Z','a','b','c','d','e','f',
+        'g','h','i','j','k','l','m','n',
+        'o','p','q','r','s','t','u','v',
+        'w','x','y','z','0','1','2','3',
+        '4','5','6','7','8','9','+','/'
+      };
+
+      static std::string _getSubSequence(const std::string& _sequence, size_t index);
+  };
+}
+
+#endif

+ 46 - 0
source/ls_std/encoding/base64/Base64.cpp

@@ -0,0 +1,46 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2022-01-03
+ * Changed:         2022-01-03
+ *
+ * */
+
+#include <ls_std/encoding/base64/Base64.hpp>
+
+std::string ls_std::Base64::encode(const std::string &_sequence)
+{
+  std::string encodedString, subSequence{};
+
+  for(size_t index = 0 ; index < _sequence.size() ; index += 3)
+  {
+    subSequence = ls_std::Base64::_getSubSequence(_sequence, index);
+    encodedString +=
+  }
+
+  return encodedString;
+}
+
+std::string ls_std::Base64::decode(const std::string &_sequence)
+{
+  return "";
+}
+
+std::string ls_std::Base64::_getSubSequence(const std::string &_sequence, size_t index)
+{
+  std::string subSequence{_sequence[index]};
+  size_t size = _sequence.size();
+
+  if((index + 1) < size)
+  {
+    subSequence += (_sequence[size+1]);
+  }
+
+  if((index + 2) < size)
+  {
+    subSequence += (_sequence[size+2]);
+  }
+
+  return subSequence;
+}