|
@@ -94,6 +94,10 @@ namespace Column {
|
|
|
return createFirstIndexMapOfColumn(column);
|
|
|
}
|
|
|
|
|
|
+ export function mapToArray<T, S>(column: Column<T>, f: (v: T) => S, ctor?: { new(size: number): ArrayLike<number> }): ArrayLike<S> {
|
|
|
+ return mapToArrayImpl(column, f, ctor || Array);
|
|
|
+ }
|
|
|
+
|
|
|
/** Makes the column backned by an array. Useful for columns that accessed often. */
|
|
|
export function asArrayColumn<T>(c: Column<T>, array?: ToArrayParams['array']): Column<T> {
|
|
|
if (c['@array']) return c;
|
|
@@ -257,6 +261,12 @@ function permutationFull<T>(c: Column<T>, map: ArrayLike<number>): Column<T> {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+function mapToArrayImpl<T, S>(c: Column<T>, f: (v: T) => S, ctor: { new(size: number): ArrayLike<number> }): ArrayLike<S> {
|
|
|
+ const ret = new ctor(c.rowCount) as any;
|
|
|
+ for (let i = 0, _i = c.rowCount; i < _i; i++) ret[i] = f(c.value(i));
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
export namespace ColumnHelpers {
|
|
|
export function getArrayBounds(rowCount: number, params?: Column.ToArrayParams) {
|
|
|
const start = params && typeof params.start !== 'undefined' ? Math.max(Math.min(params.start, rowCount - 1), 0) : 0;
|