Skip to content

Commit

Permalink
offsetRange
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Jan 2, 2021
1 parent b2c941e commit 785be52
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
8 changes: 7 additions & 1 deletion src/mark.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export class Mark {
index = [], data = [];
for (const facet of facets) {
const facetData = this.transform(take(this.data, facet));
const facetIndex = facetData === undefined ? undefined : range(facetData).map(i => i + data.length); // TODO optimize
const facetIndex = facetData === undefined ? undefined : offsetRange(facetData, data.length);
index.push(facetIndex);
data.push(...facetData); // TODO optimize
}
Expand Down Expand Up @@ -161,6 +161,12 @@ export function range(data) {
return Uint32Array.from(data, indexOf);
}

// Returns a Uint32Array with elements [k, k + 1, … k + data.length - 1].
export function offsetRange(data, k) {
k = Math.floor(k);
return Uint32Array.from(data, (_, i) => i + k);
}

// Returns an array [values[index[0]], values[index[1]], …].
export function take(values, index) {
return Array.from(index, i => values[i]);
Expand Down
4 changes: 2 additions & 2 deletions src/transforms/bin.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {bin as binner, cross, sum} from "d3-array";
import {valueof, first, second, maybeValue, range} from "../mark.js";
import {valueof, first, second, maybeValue, range, offsetRange} from "../mark.js";

export function bin1(options = {}) {
let {value, domain, thresholds, cumulative} = maybeValue(options);
Expand All @@ -16,7 +16,7 @@ export function bin1(options = {}) {
let b = bins.map(bin => binsubset(bin, facet));
b = cumulative ? accumulate(cumulative < 0 ? b.reverse() : b) : b;
b = b.filter(nonempty);
index.push(range(b).map(i => i + data.length)); // TODO optimize
index.push(offsetRange(b, data.length));
data.push(...b); // TODO optimize
}
return {index, data};
Expand Down

0 comments on commit 785be52

Please sign in to comment.