{ "auto_complete": { "selected_items": [ [ "child", "childBBox" ], [ "splt", "splitIndex" ] ] }, "buffers": [ { "file": "rbush.js", "settings": { "buffer_size": 18214, "line_ending": "Unix" } }, { "contents": "'use strict';\n\nfunction rbush(maxEntries) {\n if (!(this instanceof rbush)) return new rbush(maxEntries);\n\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries || 9);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n\n this.clear();\n}\n\nrbush.prototype = {\n clear: function () {\n this.data = createNode([]);\n return this;\n },\n\n load: function (items) {\n this._build(items, 0, data.length - 1, 0);\n },\n\n _build: function (items, left, right, height) {\n\n this.items = items;\n\n var indices = [];\n for (var i = 0; i < items.length; i++) indices.push(i);\n\n var N = right - left + 1,\n M = this._maxEntries,\n node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(indices.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.height = height;\n node.leaf = false;\n\n // split the items into M mostly square tiles\n\n var N2 = Math.ceil(N / M),\n N1 = N2 * Math.ceil(Math.sqrt(M)),\n i, j, right2, right3;\n\n this._multiSelect(indices, left, right, N1, this.compareMinX);\n\n for (i = left; i <= right; i += N1) {\n\n right2 = Math.min(i + N1 - 1, right);\n\n this._multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (j = i; j <= right2; j += N2) {\n\n right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n};\n\nfunction calcBBox(node, toBBox) {\n setEmptyBBox(node);\n\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n extend(node, node.leaf ? toBBox(child) : child);\n }\n\n return bbox;\n\n}\n\nfunction createNode(children) {\n return {\n children: children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction setEmptyBBox(bbox) {\n bbox.minX = Infinity;\n bbox.minY = Infinity;\n bbox.maxX = -Infinity;\n bbox.maxY = -Infinity;\n return bbox;\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n var stack = [left, right],\n mid;\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n mid = left + Math.ceil((right - left) / n / 2) * n;\n select(arr, left, right, mid, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n\n// Floyd-Rivest selection algorithm:\n// sort an array between left and right (inclusive) so that the smallest k elements come first (unordered)\nfunction select(arr, left, right, k, compare) {\n var n, i, z, s, sd, newLeft, newRight, t, j;\n\n while (right > left) {\n if (right - left > 600) {\n n = right - left + 1;\n i = k - left + 1;\n z = Math.log(n);\n s = 0.5 * Math.exp(2 * z / 3);\n sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (i - n / 2 < 0 ? -1 : 1);\n newLeft = Math.max(left, Math.floor(k - i * s / n + sd));\n newRight = Math.min(right, Math.floor(k + (n - i) * s / n + sd));\n select(arr, newLeft, newRight, k, compare);\n }\n\n t = arr[k];\n i = left;\n j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n", "file": "rbush-flat.js", "file_size": 5067, "file_write_time": 131018363430000000, "settings": { "buffer_size": 5179, "line_ending": "Unix" } }, { "file": "bench/bulk.bench.js", "settings": { "buffer_size": 477, "line_ending": "Unix" } }, { "file": "rbuf.proto", "settings": { "buffer_size": 238, "line_ending": "Unix" } }, { "file": "viz/viz-cluster.html", "settings": { "buffer_size": 1789, "line_ending": "Unix" } }, { "file": "README.md", "settings": { "buffer_size": 8587, "line_ending": "Unix" } }, { "file": "bench/perf.js", "settings": { "buffer_size": 3452, "line_ending": "Unix" } }, { "file": ".travis.yml", "settings": { "buffer_size": 38, "line_ending": "Unix" } }, { "file": "test/test.js", "settings": { "buffer_size": 10717, "line_ending": "Unix" } } ], "build_system": "", "build_system_choices": [ ], "build_varint": "", "command_palette": { "height": 247.0, "last_filter": "list pac", "selected_items": [ [ "list pac", "Package Control: List Packages" ], [ "install ", "Package Control: Install Package" ], [ "packa", "Package Control: Install Package" ] ], "width": 431.0 }, "console": { "height": 126.0, "history": [ "import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)" ] }, "distraction_free": { "menu_visible": true, "show_minimap": false, "show_open_files": false, "show_tabs": false, "side_bar_visible": false, "status_bar_visible": false }, "expanded_folders": [ "/Users/mourner/projects/rbush", "/Users/mourner/projects/rbush/bench", "/Users/mourner/projects/rbush/viz" ], "file_history": [ "/Users/mourner/.bash_profile", "/usr/local/Library/Formula/node.rb", "/Users/mourner/Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings", "/Users/mourner/.gitignore" ], "find": { "height": 48.0 }, "find_in_files": { "height": 0.0, "where_history": [ ] }, "find_state": { "case_sensitive": false, "find_history": [ "_insert", "clear", "createNode", "x: ", "y:", ".y", ".x", ".y2", ".x2", ".x", "bbox", "search", "compareNodeMinY", "tobbox", "intersects", "bbox", ".x", "x1", "indexOf", "splice", "zoomanim", "_animateZoom", "zoom", "3_1", "_1", "0.12", "foo", "asdasdasd", "fadeAnimation" ], "highlight": true, "in_selection": false, "preserve_case": false, "regex": false, "replace_history": [ ], "reverse": false, "show_context": true, "use_buffer2": true, "whole_word": false, "wrap": true }, "groups": [ { "selected": 5, "sheets": [ { "buffer": 0, "file": "rbush.js", "semi_transient": false, "settings": { "buffer_size": 18214, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/JavaScript/JavaScript.tmLanguage", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 9605.0, "zoom_level": 1.0 }, "stack_index": 3, "type": "text" }, { "buffer": 1, "file": "rbush-flat.js", "semi_transient": false, "settings": { "buffer_size": 5179, "regions": { }, "selection": [ [ 2289, 2322 ] ], "settings": { "open_with_edit": true, "syntax": "Packages/JavaScript/JavaScript.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 5, "type": "text" }, { "buffer": 2, "file": "bench/bulk.bench.js", "semi_transient": false, "settings": { "buffer_size": 477, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/JavaScript/JavaScript.sublime-syntax" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 4, "type": "text" }, { "buffer": 3, "file": "rbuf.proto", "semi_transient": false, "settings": { "buffer_size": 238, "regions": { }, "selection": [ [ 238, 238 ] ], "settings": { "auto_name": "", "syntax": "Packages/Protocol Buffer Syntax/Protobuf.tmLanguage" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 6, "type": "text" }, { "buffer": 4, "file": "viz/viz-cluster.html", "semi_transient": false, "settings": { "buffer_size": 1789, "regions": { }, "selection": [ [ 348, 348 ] ], "settings": { "syntax": "Packages/HTML/HTML.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 7, "type": "text" }, { "buffer": 5, "file": "README.md", "semi_transient": false, "settings": { "buffer_size": 8587, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/Markdown/Markdown.tmLanguage" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 0, "type": "text" }, { "buffer": 6, "file": "bench/perf.js", "semi_transient": false, "settings": { "buffer_size": 3452, "regions": { }, "selection": [ [ 113, 120 ] ], "settings": { "syntax": "Packages/JavaScript/JavaScript.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 547.0, "zoom_level": 1.0 }, "stack_index": 2, "type": "text" }, { "buffer": 7, "file": ".travis.yml", "semi_transient": true, "settings": { "buffer_size": 38, "regions": { }, "selection": [ [ 0, 38 ] ], "settings": { "syntax": "Packages/YAML/YAML.sublime-syntax" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 1, "type": "text" }, { "buffer": 8, "file": "test/test.js", "semi_transient": false, "settings": { "buffer_size": 10717, "regions": { }, "selection": [ [ 0, 0 ] ], "settings": { "syntax": "Packages/JavaScript/JavaScript.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 841.0, "zoom_level": 1.0 }, "stack_index": 8, "type": "text" } ] } ], "incremental_find": { "height": 23.0 }, "input": { "height": 34.0 }, "layout": { "cells": [ [ 0, 0, 1, 1 ] ], "cols": [ 0.0, 1.0 ], "rows": [ 0.0, 1.0 ] }, "menu_visible": true, "output.find_results": { "height": 0.0 }, "pinned_build_system": "", "project": "rbush.sublime-project", "replace": { "height": 42.0 }, "save_all_on_build": true, "select_file": { "height": 0.0, "last_filter": "", "selected_items": [ [ "grid", "src/layer/tile/GridLayer.js" ], [ "marker", "src/layer/marker/Marker.js" ], [ "render", "src/layer/vector/Renderer.js" ], [ "map", "src/map/Map.js" ] ], "width": 0.0 }, "select_project": { "height": 500.0, "last_filter": "", "selected_items": [ [ "", "~/projects/mapbox-gl-js/mapbox-gl-js.sublime-project" ], [ "geoj", "~/projects/geojson-vt/geojson-vt.sublime-project" ], [ "ear", "~/projects/earcut/earcut.sublime-project" ] ], "width": 380.0 }, "select_symbol": { "height": 0.0, "last_filter": "", "selected_items": [ ], "width": 0.0 }, "selected_group": 0, "settings": { }, "show_minimap": true, "show_open_files": false, "show_tabs": true, "side_bar_visible": true, "side_bar_width": 249.0, "status_bar_visible": true, "template_settings": { } }