Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: runtime/bin/base64.dart

Issue 11337019: Use patching for dart:io. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 class _Base64 {
6 static const List<int> _encodingTable = const [
7 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
8 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
9 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
10 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
11 '8', '9', '+', '/'];
12
13 /**
14 * Base64 transfer encoding for MIME (RFC 2045)
15 */
16 static String _encode(List<int> data) {
17 List<String> characters = new List<String>();
18 int i;
19 for (i = 0; i + 3 <= data.length; i += 3) {
20 int value = 0;
21 value |= data[i + 2];
22 value |= data[i + 1] << 8;
23 value |= data[i] << 16;
24 for (int j = 0; j < 4; j++) {
25 int index = (value >> ((3 - j) * 6)) & ((1 << 6) - 1);
26 characters.add(_encodingTable[index]);
27 }
28 }
29 // Remainders.
30 if (i + 2 == data.length) {
31 int value = 0;
32 value |= data[i + 1] << 8;
33 value |= data[i] << 16;
34 for (int j = 0; j < 3; j++) {
35 int index = (value >> ((3 - j) * 6)) & ((1 << 6) - 1);
36 characters.add(_encodingTable[index]);
37 }
38 characters.add("=");
39 } else if (i + 1 == data.length) {
40 int value = 0;
41 value |= data[i] << 16;
42 for (int j = 0; j < 2; j++) {
43 int index = (value >> ((3 - j) * 6)) & ((1 << 6) - 1);
44 characters.add(_encodingTable[index]);
45 }
46 characters.add("=");
47 characters.add("=");
48 }
49 StringBuffer output = new StringBuffer();
50 for (i = 0; i < characters.length; i++) {
51 if (i > 0 && i % 76 == 0) {
52 output.add("\r\n");
53 }
54 output.add(characters[i]);
55 }
56 return output.toString();
57 }
58
59
60 /**
61 * Base64 transfer decoding for MIME (RFC 2045).
62 */
63 static List<int> _decode(String data) {
64 List<int> result = new List<int>();
65 int padCount = 0;
66 int charCount = 0;
67 int value = 0;
68 for (int i = 0; i < data.length; i++) {
69 int char = data.charCodeAt(i);
70 if (65 <= char && char <= 90) { // "A" - "Z".
71 value = (value << 6) | char - 65;
72 charCount++;
73 } else if (97 <= char && char <= 122) { // "a" - "z".
74 value = (value << 6) | char - 97 + 26;
75 charCount++;
76 } else if (48 <= char && char <= 57) { // "0" - "9".
77 value = (value << 6) | char - 48 + 52;
78 charCount++;
79 } else if (char == 43) { // "+".
80 value = (value << 6) | 62;
81 charCount++;
82 } else if (char == 47) { // "/".
83 value = (value << 6) | 63;
84 charCount++;
85 } else if (char == 61) { // "=".
86 value = (value << 6);
87 charCount++;
88 padCount++;
89 }
90 if (charCount == 4) {
91 result.add((value & 0xFF0000) >> 16);
92 if (padCount < 2) {
93 result.add((value & 0xFF00) >> 8);
94 }
95 if (padCount == 0) {
96 result.add(value & 0xFF);
97 }
98 charCount = 0;
99 value = 0;
100 }
101 }
102 return result;
103 }
104 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698