1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/build/pgo/js-input/string-base64.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,151 @@ 1.4 +<!DOCTYPE html> 1.5 +<head> 1.6 +<!-- 1.7 + Copyright (C) 2007 Apple Inc. All rights reserved. 1.8 + 1.9 + Redistribution and use in source and binary forms, with or without 1.10 + modification, are permitted provided that the following conditions 1.11 + are met: 1.12 + 1. Redistributions of source code must retain the above copyright 1.13 + notice, this list of conditions and the following disclaimer. 1.14 + 2. Redistributions in binary form must reproduce the above copyright 1.15 + notice, this list of conditions and the following disclaimer in the 1.16 + documentation and/or other materials provided with the distribution. 1.17 + 1.18 + THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 1.19 + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.20 + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1.21 + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 1.22 + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 1.23 + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 1.24 + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 1.25 + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 1.26 + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1.27 + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1.28 + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1.29 +--> 1.30 + 1.31 +<title>SunSpider string-base64</title> 1.32 + 1.33 +</head> 1.34 + 1.35 +<body> 1.36 +<h3>string-base64</h3> 1.37 +<div id="console"> 1.38 +</div> 1.39 + 1.40 +<script> 1.41 + 1.42 +var _sunSpiderStartDate = new Date(); 1.43 + 1.44 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.45 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.46 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.47 + 1.48 +// From: http://lxr.mozilla.org/mozilla/source/extensions/xml-rpc/src/nsXmlRpcClient.js#956 1.49 + 1.50 +/* Convert data (an array of integers) to a Base64 string. */ 1.51 +var toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; 1.52 +var base64Pad = '='; 1.53 + 1.54 +function toBase64(data) { 1.55 + var result = ''; 1.56 + var length = data.length; 1.57 + var i; 1.58 + // Convert every three bytes to 4 ascii characters. 1.59 + for (i = 0; i < (length - 2); i += 3) { 1.60 + result += toBase64Table[data[i] >> 2]; 1.61 + result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)]; 1.62 + result += toBase64Table[((data[i+1] & 0x0f) << 2) + (data[i+2] >> 6)]; 1.63 + result += toBase64Table[data[i+2] & 0x3f]; 1.64 + } 1.65 + 1.66 + // Convert the remaining 1 or 2 bytes, pad out to 4 characters. 1.67 + if (length%3) { 1.68 + i = length - (length%3); 1.69 + result += toBase64Table[data[i] >> 2]; 1.70 + if ((length%3) == 2) { 1.71 + result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)]; 1.72 + result += toBase64Table[(data[i+1] & 0x0f) << 2]; 1.73 + result += base64Pad; 1.74 + } else { 1.75 + result += toBase64Table[(data[i] & 0x03) << 4]; 1.76 + result += base64Pad + base64Pad; 1.77 + } 1.78 + } 1.79 + 1.80 + return result; 1.81 +} 1.82 + 1.83 +/* Convert Base64 data to a string */ 1.84 +var toBinaryTable = [ 1.85 + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, 1.86 + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, 1.87 + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, 1.88 + 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1, 1.89 + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, 1.90 + 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, 1.91 + -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 1.92 + 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 1.93 +]; 1.94 + 1.95 +function base64ToString(data) { 1.96 + var result = ''; 1.97 + var leftbits = 0; // number of bits decoded, but yet to be appended 1.98 + var leftdata = 0; // bits decoded, but yet to be appended 1.99 + 1.100 + // Convert one by one. 1.101 + for (var i = 0; i < data.length; i++) { 1.102 + var c = toBinaryTable[data.charCodeAt(i) & 0x7f]; 1.103 + var padding = (data[i] == base64Pad); 1.104 + // Skip illegal characters and whitespace 1.105 + if (c == -1) continue; 1.106 + 1.107 + // Collect data into leftdata, update bitcount 1.108 + leftdata = (leftdata << 6) | c; 1.109 + leftbits += 6; 1.110 + 1.111 + // If we have 8 or more bits, append 8 bits to the result 1.112 + if (leftbits >= 8) { 1.113 + leftbits -= 8; 1.114 + // Append if not padding. 1.115 + if (!padding) 1.116 + result += String.fromCharCode((leftdata >> leftbits) & 0xff); 1.117 + leftdata &= (1 << leftbits) - 1; 1.118 + } 1.119 + } 1.120 + 1.121 + // If there are any bits left, the base64 string was corrupted 1.122 + if (leftbits) 1.123 + throw Components.Exception('Corrupted base64 string'); 1.124 + 1.125 + return result; 1.126 +} 1.127 + 1.128 +var str = ""; 1.129 + 1.130 +for ( var i = 0; i < 8192; i++ ) 1.131 + str += String.fromCharCode( (25 * Math.random()) + 97 ); 1.132 + 1.133 +for ( var i = 8192; i <= 16384; i *= 2 ) { 1.134 + 1.135 + var base64; 1.136 + 1.137 + base64 = toBase64(str); 1.138 + base64ToString(base64); 1.139 + 1.140 + // Double the string 1.141 + str += str; 1.142 +} 1.143 + 1.144 +toBinaryTable = null; 1.145 + 1.146 + 1.147 +var _sunSpiderInterval = new Date() - _sunSpiderStartDate; 1.148 + 1.149 +document.getElementById("console").innerHTML = _sunSpiderInterval; 1.150 +</script> 1.151 + 1.152 + 1.153 +</body> 1.154 +</html>