branch: devel-tetsuo-xml-binary
commit 302d69d37a03e47fe34acb620e9c0d17704d03c1
Author: Tetsuo Koyama <[email protected]>
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