getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] (no subject)


From: Tetsuo Koyama
Subject: [Getfem-commits] (no subject)
Date: Sat, 3 Oct 2020 20:45:55 -0400 (EDT)

branch: devel-tetsuo-xml-binary
commit 302d69d37a03e47fe34acb620e9c0d17704d03c1
Author: Tetsuo Koyama <tkoyama010@gmail.com>
AuthorDate: Tue Jun 16 12:58:31 2020 +0900

    Add base64_encode
---
 src/getfem_export.cc | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/getfem_export.cc b/src/getfem_export.cc
index 63abc0c..108a206 100644
--- a/src/getfem_export.cc
+++ b/src/getfem_export.cc
@@ -46,6 +46,36 @@ namespace getfem
     return true;
   }
 
+  /* Base64 encoding (https://en.wikipedia.org/wiki/Base64) */
+  std::string base64_encode(const std::vector<unsigned char>& src)
+  {
+    const std::string 
table("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
+    std::string dst;
+    for (std::size_t i = 0; i < src.size(); ++i) {
+      switch (i % 3) {
+      case 0:
+        dst.push_back(table[(src[i] & 0xFC) >> 2]);
+        if (i + 1 == src.size()) {
+          dst.push_back(table[(src[i] & 0x03) << 4]);
+          dst.push_back('=');
+          dst.push_back('=');
+        }
+        break;
+      case 1:
+        dst.push_back(table[((src[i - 1] & 0x03) << 4) | ((src[i + 0] & 0xF0) 
>> 4)]);
+        if (i + 1 == src.size()) {
+          dst.push_back(table[(src[i] & 0x0F) << 2]);
+          dst.push_back('=');
+        }
+        break;
+      case 2:
+        dst.push_back(table[((src[i - 1] & 0x0F) << 2) | ((src[i + 0] & 0xC0) 
>> 6)]);
+        dst.push_back(table[src[i] & 0x3F]);
+        break;
+      }
+    }
+    return dst;
+  }
 
   /* -------------------------------------------------------------
    * VTK export



reply via email to

[Prev in Thread] Current Thread [Next in Thread]