// Generated by CoffeeScript 1.10.0 (function() { window.sizeify = function(n) { if (n.children == null) { n.n = 0; n.size = 1; return 1; } else { n.size = 0; n.children.forEach(function(c) { return n.size += sizeify(c); }); n.n = Math.ceil(Math.log(n.size) / Math.log(4)); n.size = Math.pow(4, n.n); return n.size; } }; window.quad_layout = function(mapping, size) { return function(digits) { var m; m = mapping(digits); return { x: m.j / Math.pow(2, m.n) * size, y: m.i / Math.pow(2, m.n) * size, dx: 1 / Math.pow(2, m.n) * size, dy: 1 / Math.pow(2, m.n) * size, digits: m.digits }; }; }; window.hquad = function(digits) { var d, i, i_temp, j, k, l, n; n = digits.length; l = 1; i = 0; j = 0; for (k = digits.length - 1; k >= 0; k += -1) { d = digits[k]; switch (d) { case '0': i_temp = i; i = j; j = i_temp; break; case '1': i += l; break; case '2': i += l; j += l; break; case '3': i_temp = i; i = l - j - 1; j = 2 * l - i_temp - 1; } l = 2 * l; } return { j: j, i: i, n: n, digits: digits }; }; window.quad = function(digits) { var d, i, j, k, l, n; n = digits.length; l = 1; i = 0; j = 0; for (k = digits.length - 1; k >= 0; k += -1) { d = digits[k]; switch (d) { case '1': j += l; break; case '2': i += l; break; case '3': i += l; j += l; } l = 2 * l; } return { j: j, i: i, n: n, digits: digits }; }; window.get_quad_code = function(offset, N, n) { var b4; b4 = offset.toString(4); b4 = Array(N - b4.length + 1).join('0') + b4; b4 = b4.slice(0, N - n); return b4; }; window.get_quads = function(cls, order) { var d, digits, i, j, k, len, len1, o, offset, p, q, quad, quads, ref, ref1, start_to_z, z_to_end; quads = []; if (cls.start !== cls.z) { offset = cls.start; start_to_z = (cls.z - cls.start).toString(4).split('').reverse().join(''); for (i = k = 0, len = start_to_z.length; k < len; i = ++k) { d = start_to_z[i]; for (j = o = 0, ref = parseInt(d); 0 <= ref ? o < ref : o > ref; j = 0 <= ref ? ++o : --o) { digits = start_to_z.length - (start_to_z.length - i); quad = get_quad_code(offset, order, digits); quads.push(quad); offset += parseInt('1' + Array(digits + 1).join('0'), 4); } } } offset = cls.z; z_to_end = (cls.end - cls.z).toString(4); for (i = p = 0, len1 = z_to_end.length; p < len1; i = ++p) { d = z_to_end[i]; for (j = q = 0, ref1 = parseInt(d); 0 <= ref1 ? q < ref1 : q > ref1; j = 0 <= ref1 ? ++q : --q) { digits = z_to_end.length - i - 1; quad = get_quad_code(offset, order, digits); quads.push(quad); offset += parseInt('1' + Array(z_to_end.length - i).join('0'), 4); } } return quads; }; window.get_z = function(d) { var end_4, i, initial_i, new_start_4, start_4; start_4 = d.start.toString(4); end_4 = d.end.toString(4); if (start_4 === '0') { return parseInt(start_4, 4); } i = start_4.length - 1; initial_i = start_4.length - 1; while (start_4.length <= end_4.length) { new_start_4 = replace_char(start_4, i, '0'); new_start_4 = (parseInt('1' + Array(new_start_4.length - i + 1).join('0'), 4) + parseInt(new_start_4, 4)).toString(4); if (parseInt(new_start_4, 4) < d.end) { start_4 = new_start_4; } else { break; } if (initial_i === start_4.length) { i -= 1; } else { initial_i += 1; } } return parseInt(start_4, 4); }; window.replace_char = function(s, index, new_char) { return s.substr(0, index) + new_char + s.substr(index + 1); }; }).call(this);