Skip to content

Commit

Permalink
Added aggregate and apply.
Browse files Browse the repository at this point in the history
  • Loading branch information
BSick7 committed Apr 22, 2014
1 parent 91338ca commit 654fa05
Show file tree
Hide file tree
Showing 7 changed files with 209 additions and 36 deletions.
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "exjs",
"version": "0.1.0",
"version": "0.1.1",
"homepage": "https://github.com/BSick7/exjs",
"authors": [
"BSick7 <brad.sickles@gmail.com>"
Expand Down
6 changes: 6 additions & 0 deletions dist/ex.d.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
declare module exjs {
interface IEnumerable<T> {
getEnumerator(): IEnumerator<T>;
aggregate<TAccumulate>(seed: TAccumulate, accumulator: (acc: TAccumulate, cur: T) => TAccumulate): TAccumulate;
all(predicate?: (t: T, index?: number) => boolean): boolean;
any(predicate?: (t: T, index?: number) => boolean): boolean;
apply<T>(action: (t: T, index?: number) => void): IEnumerable<T>;
at(index: number): T;
average(selector?: (t: T) => number): number;
concat(second: IEnumerable<T>): IEnumerable<T>;
Expand Down Expand Up @@ -52,8 +54,10 @@ declare module exjs {
class Enumerable<T> implements IEnumerable<T> {
constructor();
public getEnumerator(): IEnumerator<T>;
public aggregate<TAccumulate>(seed: TAccumulate, accumulator: (acc: TAccumulate, cur: T) => TAccumulate): TAccumulate;
public all(predicate?: (t: T, index?: number) => boolean): boolean;
public any(predicate?: (t: T, index?: number) => boolean): boolean;
public apply<T>(action: (t: T, index?: number) => void): IEnumerable<T>;
public at(index: number): T;
public average(selector?: (t: T) => number): number;
public concat(second: IEnumerable<T>): IEnumerable<T>;
Expand Down Expand Up @@ -90,6 +94,8 @@ declare module exjs {
public zip<TSecond, TResult>(second: TSecond[], resultSelector: (f: T, s: TSecond) => TResult): IEnumerable<TResult>;
}
}
declare module exjs {
}
interface Array<T> {
en(): exjs.IEnumerable<T>;
}
Expand Down
46 changes: 46 additions & 0 deletions dist/ex.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/*
* ExJs (https://github.com/BSick7/exjs)
* Version 0.1.1
*/

var exjs;
(function (exjs) {
var Enumerable = (function () {
Expand All @@ -11,6 +16,15 @@ var exjs;
current: undefined
};
};

Enumerable.prototype.aggregate = function (seed, accumulator) {
var active = seed;
for (var enumerator = this.getEnumerator(); enumerator.moveNext();) {
active = accumulator(active, enumerator.current);
}
return active;
};

Enumerable.prototype.all = function (predicate) {
if (predicate) {
var e = this.getEnumerator();
Expand All @@ -36,6 +50,9 @@ var exjs;
}
return i === 0;
};
Enumerable.prototype.apply = function (action) {
throw new Error("Not implemented");
};
Enumerable.prototype.at = function (index) {
var e = this.getEnumerator();
var i = 0;
Expand Down Expand Up @@ -210,6 +227,35 @@ var exjs;
})();
exjs.Enumerable = Enumerable;
})(exjs || (exjs = {}));
var exjs;
(function (exjs) {
function applyEnumerator(prev, action) {
var t;
var i = 0;
var e = {
current: undefined,
moveNext: function () {
if (!t)
t = prev.getEnumerator();
if (!t.moveNext())
return false;
action(e.current = t.current, i);
i++;
return true;
}
};
return e;
}

exjs.Enumerable.prototype.apply = function (action) {
var _this = this;
var e = new exjs.Enumerable();
e.getEnumerator = function () {
return applyEnumerator(_this, action);
};
return e;
};
})(exjs || (exjs = {}));
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "exjs",
"version": "0.1.0",
"version": "0.1.1",
"description": "Extension library",
"main": "Gruntfile.js",
"directories": {
Expand Down
25 changes: 25 additions & 0 deletions src/apply.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/// <reference path="enumerable.ts" />

module exjs {
function applyEnumerator<T>(prev: IEnumerable<T>, action: (t: T, index?: number) => void): IEnumerator<T> {
var t: IEnumerator<T>;
var i = 0;
var e = {
current: undefined,
moveNext: function (): boolean {
if (!t) t = prev.getEnumerator();
if (!t.moveNext()) return false;
action(e.current = t.current, i)
i++;
return true;
}
};
return e;
}

Enumerable.prototype.apply = function<T>(action: (t: T, index?: number) => void): IEnumerable<T> {
var e = new Enumerable<T>();
e.getEnumerator = () => applyEnumerator(<IEnumerable<T>>this, action);
return e;
};
}
12 changes: 12 additions & 0 deletions src/enumerable.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
module exjs {
export interface IEnumerable<T> {
getEnumerator(): IEnumerator<T>;
aggregate<TAccumulate>(seed: TAccumulate, accumulator: (acc: TAccumulate, cur: T) => TAccumulate): TAccumulate;
all(predicate?: (t: T, index?: number) => boolean): boolean;
any(predicate?: (t: T, index?: number) => boolean): boolean;
apply<T>(action: (t: T, index?: number) => void): IEnumerable<T>;
at(index: number): T;
average(selector?: (t: T) => number): number;
concat(second: IEnumerable<T>): IEnumerable<T>;
Expand Down Expand Up @@ -64,6 +66,15 @@ module exjs {
current: undefined
};
}

aggregate<TAccumulate>(seed: TAccumulate, accumulator: (acc: TAccumulate, cur: T) => TAccumulate): TAccumulate {
var active = seed;
for (var enumerator = this.getEnumerator(); enumerator.moveNext(); ) {
active = accumulator(active, enumerator.current);
}
return active;
}

all(predicate?: (t: T, index?: number) => boolean): boolean {
if (predicate) {
var e = this.getEnumerator();
Expand All @@ -87,6 +98,7 @@ module exjs {
}
return i === 0;
}
apply<T>(action: (t: T, index?: number) => void): IEnumerable<T> { throw new Error("Not implemented"); }
at(index: number): T {
var e = this.getEnumerator();
var i = 0;
Expand Down
Loading

0 comments on commit 654fa05

Please sign in to comment.