Skip to content

Commit 2f4a349

Browse files
author
Brian Hulette
committed
Minor tweaks
1 parent 2e118ab commit 2f4a349

File tree

2 files changed

+17
-21
lines changed

2 files changed

+17
-21
lines changed

js/src/predicate.ts

+10-7
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ export abstract class Value<T> {
1919
}
2020
}
2121

22-
class Literal<T= any> extends Value<T> {
22+
export class Literal<T= any> extends Value<T> {
2323
constructor(public v: T) { super(); }
2424
}
2525

26-
class Col<T= any> extends Value<T> {
26+
export class Col<T= any> extends Value<T> {
2727
vector: Vector<T>;
2828
colidx: number;
2929

@@ -55,7 +55,7 @@ export abstract class Predicate {
5555
ands(): Predicate[] { return [this]; }
5656
}
5757

58-
abstract class ComparisonPredicate<T= any> extends Predicate {
58+
export abstract class ComparisonPredicate<T= any> extends Predicate {
5959
constructor(public readonly left: Value<T>, public readonly right: Value<T>) {
6060
super();
6161
}
@@ -105,7 +105,7 @@ class Or extends CombinationPredicate {
105105
}
106106
}
107107

108-
class Equals extends ComparisonPredicate {
108+
export class Equals extends ComparisonPredicate {
109109
protected _bindLitLit(_: Vector<any>[], left: Literal, right: Literal): PredicateFunc {
110110
const rtrn: boolean = left.v == right.v;
111111
return () => rtrn;
@@ -121,6 +121,9 @@ class Equals extends ComparisonPredicate {
121121
const col_func = col.bind(cols);
122122
if (col.vector instanceof DictionaryVector) {
123123
// Assume that there is only one key with the value `lit.v`
124+
// TODO: add lazily-computed reverse dictionary lookups, associated
125+
// with col.vector.data so that we only have to do this once per
126+
// dictionary
124127
let key = -1;
125128
for (; ++key < col.vector.data.length;) {
126129
if (col.vector.data.get(key) === lit.v) {
@@ -146,7 +149,7 @@ class Equals extends ComparisonPredicate {
146149
}
147150
}
148151

149-
class LTeq extends ComparisonPredicate {
152+
export class LTeq extends ComparisonPredicate {
150153
protected _bindLitLit(_: Vector<any>[], left: Literal, right: Literal): PredicateFunc {
151154
const rtrn: boolean = left.v <= right.v;
152155
return () => rtrn;
@@ -164,7 +167,7 @@ class LTeq extends ComparisonPredicate {
164167
}
165168
}
166169

167-
class GTeq extends ComparisonPredicate {
170+
export class GTeq extends ComparisonPredicate {
168171
protected _bindLitLit(_: Vector<any>[], left: Literal, right: Literal): PredicateFunc {
169172
const rtrn: boolean = left.v >= right.v;
170173
return () => rtrn;
@@ -183,4 +186,4 @@ class GTeq extends ComparisonPredicate {
183186
}
184187

185188
export function lit(n: number): Value<any> { return new Literal(n); }
186-
export function col(n: string): Value<any> { return new Col(n); }
189+
export function col(n: string): Col<any> { return new Col(n); }

js/src/table.ts

+7-14
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ export class TableRow {
3737
}
3838

3939
export interface DataFrame {
40-
readonly batches: Vector[][];
41-
readonly lengths: Uint32Array;
4240
filter(predicate: Predicate): DataFrame;
4341
scan(next: NextFunc): void;
4442
count(): number;
@@ -129,23 +127,18 @@ export class Table implements DataFrame {
129127
}
130128

131129
class FilteredDataFrame implements DataFrame {
132-
readonly lengths: Uint32Array;
133-
readonly batches: Vector[][];
134-
constructor (readonly parent: DataFrame, private predicate: Predicate) {
135-
this.batches = parent.batches;
136-
this.lengths = parent.lengths;
137-
}
130+
constructor (readonly parent: Table, private predicate: Predicate) {}
138131

139132
scan(next: NextFunc) {
140133
// inlined version of this:
141134
// this.parent.scan((idx, columns) => {
142135
// if (this.predicate(idx, columns)) next(idx, columns);
143136
// });
144-
for (let batch = -1; ++batch < this.lengths.length;) {
145-
const length = this.lengths[batch];
137+
for (let batch = -1; ++batch < this.parent.lengths.length;) {
138+
const length = this.parent.lengths[batch];
146139

147140
// load batches
148-
const columns = this.batches[batch];
141+
const columns = this.parent.batches[batch];
149142
const predicate = this.predicate.bind(columns);
150143

151144
// yield all indices
@@ -163,11 +156,11 @@ class FilteredDataFrame implements DataFrame {
163156
// });
164157
// return sum;
165158
let sum = 0;
166-
for (let batch = -1; ++batch < this.lengths.length;) {
167-
const length = this.lengths[batch];
159+
for (let batch = -1; ++batch < this.parent.lengths.length;) {
160+
const length = this.parent.lengths[batch];
168161

169162
// load batches
170-
const columns = this.batches[batch];
163+
const columns = this.parent.batches[batch];
171164
const predicate = this.predicate.bind(columns);
172165

173166
// yield all indices

0 commit comments

Comments
 (0)