git repos / blockattack-game

blame: source/code/Libs/include/cereal/external/base64.hpp

normal view · raw

7a956470 sago007 2016-02-14 17:09 1
/*
7a956470 sago007 2016-02-14 17:09 2
   Copyright (C) 2004-2008 René Nyffenegger
7a956470 sago007 2016-02-14 17:09 3
7a956470 sago007 2016-02-14 17:09 4
   This source code is provided 'as-is', without any express or implied
7a956470 sago007 2016-02-14 17:09 5
   warranty. In no event will the author be held liable for any damages
7a956470 sago007 2016-02-14 17:09 6
   arising from the use of this software.
7a956470 sago007 2016-02-14 17:09 7
7a956470 sago007 2016-02-14 17:09 8
   Permission is granted to anyone to use this software for any purpose,
7a956470 sago007 2016-02-14 17:09 9
   including commercial applications, and to alter it and redistribute it
7a956470 sago007 2016-02-14 17:09 10
   freely, subject to the following restrictions:
7a956470 sago007 2016-02-14 17:09 11
7a956470 sago007 2016-02-14 17:09 12
   1. The origin of this source code must not be misrepresented; you must not
7a956470 sago007 2016-02-14 17:09 13
      claim that you wrote the original source code. If you use this source code
7a956470 sago007 2016-02-14 17:09 14
      in a product, an acknowledgment in the product documentation would be
7a956470 sago007 2016-02-14 17:09 15
      appreciated but is not required.
7a956470 sago007 2016-02-14 17:09 16
7a956470 sago007 2016-02-14 17:09 17
   2. Altered source versions must be plainly marked as such, and must not be
7a956470 sago007 2016-02-14 17:09 18
      misrepresented as being the original source code.
7a956470 sago007 2016-02-14 17:09 19
7a956470 sago007 2016-02-14 17:09 20
   3. This notice may not be removed or altered from any source distribution.
7a956470 sago007 2016-02-14 17:09 21
7a956470 sago007 2016-02-14 17:09 22
   René Nyffenegger rene.nyffenegger@adp-gmbh.ch
7a956470 sago007 2016-02-14 17:09 23
*/
7a956470 sago007 2016-02-14 17:09 24
7a956470 sago007 2016-02-14 17:09 25
#ifndef CEREAL_EXTERNAL_BASE64_HPP_
7a956470 sago007 2016-02-14 17:09 26
#define CEREAL_EXTERNAL_BASE64_HPP_
7a956470 sago007 2016-02-14 17:09 27
7a956470 sago007 2016-02-14 17:09 28
#include <string>
7a956470 sago007 2016-02-14 17:09 29
6c5f2c01 sago007 2017-03-15 17:56 30
namespace cereal
7a956470 sago007 2016-02-14 17:09 31
{
6c5f2c01 sago007 2017-03-15 17:56 32
  namespace base64
6c5f2c01 sago007 2017-03-15 17:56 33
  {
6c5f2c01 sago007 2017-03-15 17:56 34
    static const std::string chars =
6c5f2c01 sago007 2017-03-15 17:56 35
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
6c5f2c01 sago007 2017-03-15 17:56 36
      "abcdefghijklmnopqrstuvwxyz"
6c5f2c01 sago007 2017-03-15 17:56 37
      "0123456789+/";
6c5f2c01 sago007 2017-03-15 17:56 38
6c5f2c01 sago007 2017-03-15 17:56 39
    static inline bool is_base64(unsigned char c) {
6c5f2c01 sago007 2017-03-15 17:56 40
      return (isalnum(c) || (c == '+') || (c == '/'));
7a956470 sago007 2016-02-14 17:09 41
    }
7a956470 sago007 2016-02-14 17:09 42
6c5f2c01 sago007 2017-03-15 17:56 43
    inline std::string encode(unsigned char const* bytes_to_encode, size_t in_len) {
6c5f2c01 sago007 2017-03-15 17:56 44
      std::string ret;
6c5f2c01 sago007 2017-03-15 17:56 45
      int i = 0;
6c5f2c01 sago007 2017-03-15 17:56 46
      int j = 0;
6c5f2c01 sago007 2017-03-15 17:56 47
      unsigned char char_array_3[3];
6c5f2c01 sago007 2017-03-15 17:56 48
      unsigned char char_array_4[4];
6c5f2c01 sago007 2017-03-15 17:56 49
6c5f2c01 sago007 2017-03-15 17:56 50
      while (in_len--) {
6c5f2c01 sago007 2017-03-15 17:56 51
        char_array_3[i++] = *(bytes_to_encode++);
6c5f2c01 sago007 2017-03-15 17:56 52
        if (i == 3) {
6c5f2c01 sago007 2017-03-15 17:56 53
          char_array_4[0] = static_cast<unsigned char>((char_array_3[0] & 0xfc) >> 2);
6c5f2c01 sago007 2017-03-15 17:56 54
          char_array_4[1] = static_cast<unsigned char>( ( ( char_array_3[0] & 0x03 ) << 4 ) + ( ( char_array_3[1] & 0xf0 ) >> 4 ) );
6c5f2c01 sago007 2017-03-15 17:56 55
          char_array_4[2] = static_cast<unsigned char>( ( ( char_array_3[1] & 0x0f ) << 2 ) + ( ( char_array_3[2] & 0xc0 ) >> 6 ) );
6c5f2c01 sago007 2017-03-15 17:56 56
          char_array_4[3] = static_cast<unsigned char>( char_array_3[2] & 0x3f );
6c5f2c01 sago007 2017-03-15 17:56 57
6c5f2c01 sago007 2017-03-15 17:56 58
          for(i = 0; (i <4) ; i++)
6c5f2c01 sago007 2017-03-15 17:56 59
            ret += chars[char_array_4[i]];
6c5f2c01 sago007 2017-03-15 17:56 60
          i = 0;
6c5f2c01 sago007 2017-03-15 17:56 61
        }
6c5f2c01 sago007 2017-03-15 17:56 62
      }
7a956470 sago007 2016-02-14 17:09 63
6c5f2c01 sago007 2017-03-15 17:56 64
      if (i)
6c5f2c01 sago007 2017-03-15 17:56 65
      {
6c5f2c01 sago007 2017-03-15 17:56 66
        for(j = i; j < 3; j++)
6c5f2c01 sago007 2017-03-15 17:56 67
          char_array_3[j] = '\0';
7a956470 sago007 2016-02-14 17:09 68
6c5f2c01 sago007 2017-03-15 17:56 69
        char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
6c5f2c01 sago007 2017-03-15 17:56 70
        char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
6c5f2c01 sago007 2017-03-15 17:56 71
        char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
6c5f2c01 sago007 2017-03-15 17:56 72
        char_array_4[3] = char_array_3[2] & 0x3f;
7a956470 sago007 2016-02-14 17:09 73
6c5f2c01 sago007 2017-03-15 17:56 74
        for (j = 0; (j < i + 1); j++)
6c5f2c01 sago007 2017-03-15 17:56 75
          ret += chars[char_array_4[j]];
7a956470 sago007 2016-02-14 17:09 76
6c5f2c01 sago007 2017-03-15 17:56 77
        while((i++ < 3))
6c5f2c01 sago007 2017-03-15 17:56 78
          ret += '=';
6c5f2c01 sago007 2017-03-15 17:56 79
      }
7a956470 sago007 2016-02-14 17:09 80
6c5f2c01 sago007 2017-03-15 17:56 81
      return ret;
6c5f2c01 sago007 2017-03-15 17:56 82
    }
7a956470 sago007 2016-02-14 17:09 83
6c5f2c01 sago007 2017-03-15 17:56 84
    inline std::string decode(std::string const& encoded_string) {
6c5f2c01 sago007 2017-03-15 17:56 85
      size_t in_len = encoded_string.size();
6c5f2c01 sago007 2017-03-15 17:56 86
      size_t i = 0;
6c5f2c01 sago007 2017-03-15 17:56 87
      size_t j = 0;
6c5f2c01 sago007 2017-03-15 17:56 88
      int in_ = 0;
6c5f2c01 sago007 2017-03-15 17:56 89
      unsigned char char_array_4[4], char_array_3[3];
6c5f2c01 sago007 2017-03-15 17:56 90
      std::string ret;
6c5f2c01 sago007 2017-03-15 17:56 91
6c5f2c01 sago007 2017-03-15 17:56 92
      while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
6c5f2c01 sago007 2017-03-15 17:56 93
        char_array_4[i++] = encoded_string[in_]; in_++;
6c5f2c01 sago007 2017-03-15 17:56 94
        if (i ==4) {
6c5f2c01 sago007 2017-03-15 17:56 95
          for (i = 0; i <4; i++)
6c5f2c01 sago007 2017-03-15 17:56 96
            char_array_4[i] = static_cast<unsigned char>(chars.find( char_array_4[i] ));
6c5f2c01 sago007 2017-03-15 17:56 97
6c5f2c01 sago007 2017-03-15 17:56 98
          char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
6c5f2c01 sago007 2017-03-15 17:56 99
          char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
6c5f2c01 sago007 2017-03-15 17:56 100
          char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
6c5f2c01 sago007 2017-03-15 17:56 101
6c5f2c01 sago007 2017-03-15 17:56 102
          for (i = 0; (i < 3); i++)
6c5f2c01 sago007 2017-03-15 17:56 103
            ret += char_array_3[i];
6c5f2c01 sago007 2017-03-15 17:56 104
          i = 0;
6c5f2c01 sago007 2017-03-15 17:56 105
        }
6c5f2c01 sago007 2017-03-15 17:56 106
      }
7a956470 sago007 2016-02-14 17:09 107
6c5f2c01 sago007 2017-03-15 17:56 108
      if (i) {
6c5f2c01 sago007 2017-03-15 17:56 109
        for (j = i; j <4; j++)
6c5f2c01 sago007 2017-03-15 17:56 110
          char_array_4[j] = 0;
7a956470 sago007 2016-02-14 17:09 111
6c5f2c01 sago007 2017-03-15 17:56 112
        for (j = 0; j <4; j++)
6c5f2c01 sago007 2017-03-15 17:56 113
          char_array_4[j] = static_cast<unsigned char>(chars.find( char_array_4[j] ));
7a956470 sago007 2016-02-14 17:09 114
7a956470 sago007 2016-02-14 17:09 115
        char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
7a956470 sago007 2016-02-14 17:09 116
        char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
7a956470 sago007 2016-02-14 17:09 117
        char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
7a956470 sago007 2016-02-14 17:09 118
6c5f2c01 sago007 2017-03-15 17:56 119
        for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
7a956470 sago007 2016-02-14 17:09 120
      }
7a956470 sago007 2016-02-14 17:09 121
6c5f2c01 sago007 2017-03-15 17:56 122
      return ret;
7a956470 sago007 2016-02-14 17:09 123
    }
6c5f2c01 sago007 2017-03-15 17:56 124
  } // namespace base64
6c5f2c01 sago007 2017-03-15 17:56 125
} // namespace cereal
7a956470 sago007 2016-02-14 17:09 126
7a956470 sago007 2016-02-14 17:09 127
#endif // CEREAL_EXTERNAL_BASE64_HPP_
1970-01-01 00:00 128