Skip to content

Commit 85ffc29

Browse files
scatter/gather methods for various data structures
1 parent 4e653f7 commit 85ffc29

File tree

12 files changed

+268
-21
lines changed

12 files changed

+268
-21
lines changed

.jshintrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"esnext": true
3+
}

js/dist/bucketsort.js

Lines changed: 161 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,166 @@
1-
( function ( ) {
1+
'use strict';
22

3-
'use strict' ;
3+
(function () {
44

5-
var definition = function ( exports , undefined ) {
5+
'use strict';
66

7+
var definition = function definition(exports, undefined) {
78

8-
/* js/src/dummy.js */
9+
/* js/src/list */
10+
(function (exports) {
911

10-
return exports ;
11-
} ;
12-
if ( typeof exports === "object" ) {
13-
definition( exports ) ;
14-
}
15-
else if ( typeof define === "function" && define.amd ) {
16-
define( "aureooms-js-bucketsort" , [ ] , function ( ) { return definition( { } ) ; } ) ;
17-
}
18-
else if ( typeof window === "object" && typeof window.document === "object" ) {
19-
definition( window["bucketsort"] = { } ) ;
20-
}
21-
else console.error( "unable to detect type of module to define for aureooms-js-bucketsort") ;
22-
} )( ) ;
12+
/* js/src/list/gather.js */
13+
14+
var gather = function gather(list, buckets, bi, bj) {
15+
16+
for (; bi < bj; ++bi) {
17+
18+
var bucket = buckets[bi];
19+
20+
var _iteratorNormalCompletion = true;
21+
var _didIteratorError = false;
22+
var _iteratorError = undefined;
23+
24+
try {
25+
for (var _iterator = bucket[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
26+
var x = _step.value;
27+
list.push(x);
28+
}
29+
} catch (err) {
30+
_didIteratorError = true;
31+
_iteratorError = err;
32+
} finally {
33+
try {
34+
if (!_iteratorNormalCompletion && _iterator['return']) {
35+
_iterator['return']();
36+
}
37+
} finally {
38+
if (_didIteratorError) {
39+
throw _iteratorError;
40+
}
41+
}
42+
}
43+
}
44+
};
45+
46+
exports.gather = gather;
47+
48+
/* js/src/list/scatter.js */
49+
50+
var scatter = function scatter(key, iterable, buckets) {
51+
var _iteratorNormalCompletion2 = true;
52+
var _didIteratorError2 = false;
53+
var _iteratorError2 = undefined;
54+
55+
try {
56+
57+
for (var _iterator2 = iterable[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
58+
var x = _step2.value;
59+
buckets[key(x)].push(x);
60+
}
61+
} catch (err) {
62+
_didIteratorError2 = true;
63+
_iteratorError2 = err;
64+
} finally {
65+
try {
66+
if (!_iteratorNormalCompletion2 && _iterator2['return']) {
67+
_iterator2['return']();
68+
}
69+
} finally {
70+
if (_didIteratorError2) {
71+
throw _iteratorError2;
72+
}
73+
}
74+
}
75+
};
76+
77+
exports.scatter = scatter;
78+
})(exports['list'] = {});
79+
/* js/src/nodes */
80+
(function (exports) {
81+
82+
/* js/src/nodes/gather.js */
83+
84+
var gather = function gather(head, buckets, bi, bj) {
85+
86+
// output is head.next
87+
88+
var last = head;
89+
90+
for (; bi < bj; ++bi) {
91+
92+
var bucket = buckets[bi];
93+
94+
if (bucket.next === null) continue;
95+
96+
last.next = bucket.next;
97+
98+
last = bucket.last;
99+
}
100+
};
101+
102+
exports.gather = gather;
103+
104+
/* js/src/nodes/scatter.js */
105+
106+
var scatter = function scatter(key, head, buckets) {
107+
108+
// input is head.next
109+
110+
// head.next should be deleted for garbage collection
111+
112+
while (true) {
113+
114+
head = head.next;
115+
116+
if (head === null) break;
117+
118+
buckets[key(head.value)].last.next = head;
119+
}
120+
};
121+
122+
exports.scatter = scatter;
123+
})(exports['nodes'] = {});
124+
/* js/src/stack */
125+
(function (exports) {
126+
127+
/* js/src/stack/gather.js */
128+
129+
var gather = function gather(main, buckets, bi, bj) {
130+
131+
while (--bj >= bi) {
132+
133+
var bucket = buckets[bj];
134+
135+
while (!bucket.empty()) main.push(bucket.pop());
136+
}
137+
};
138+
139+
exports.gather = gather;
140+
141+
/* js/src/stack/scatter.js */
142+
143+
var scatter = function scatter(key, main, buckets) {
144+
145+
while (!main.empty()) {
146+
147+
var x = main.pop();
148+
149+
buckets[key(x)].push(x);
150+
}
151+
};
152+
153+
exports.scatter = scatter;
154+
})(exports['stack'] = {});
155+
return exports;
156+
};
157+
if (typeof exports === 'object') {
158+
definition(exports);
159+
} else if (typeof define === 'function' && define.amd) {
160+
define('aureooms-js-bucketsort', [], function () {
161+
return definition({});
162+
});
163+
} else if (typeof window === 'object' && typeof window.document === 'object') {
164+
definition(window['bucketsort'] = {});
165+
} else console.error('unable to detect type of module to define for aureooms-js-bucketsort');
166+
})();

js/dist/bucketsort.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/dist/bucketsort.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/src/dummy.js

Whitespace-only changes.

js/src/list/gather.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
3+
let gather = function ( list , buckets , bi , bj ) {
4+
5+
for ( ; bi < bj ; ++bi ) {
6+
7+
let bucket = buckets[bi] ;
8+
9+
for ( let x of bucket ) list.push( x ) ;
10+
11+
}
12+
13+
} ;
14+
15+
exports.gather = gather ;

js/src/list/scatter.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
3+
let scatter = function ( key , iterable , buckets ) {
4+
5+
for ( let x of iterable ) buckets[ key( x ) ].push( x ) ;
6+
7+
} ;
8+
9+
exports.scatter = scatter ;

js/src/nodes/gather.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
3+
let gather = function ( head , buckets , bi , bj ) {
4+
5+
// output is head.next
6+
7+
let last = head ;
8+
9+
for ( ; bi < bj ; ++bi ) {
10+
11+
let bucket = buckets[bi] ;
12+
13+
if ( bucket.next === null ) continue ;
14+
15+
last.next = bucket.next ;
16+
17+
last = bucket.last ;
18+
19+
}
20+
21+
} ;
22+
23+
exports.gather = gather ;

js/src/nodes/scatter.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
3+
let scatter = function ( key , head , buckets ) {
4+
5+
// input is head.next
6+
7+
// head.next should be deleted for garbage collection
8+
9+
while ( true ) {
10+
11+
head = head.next ;
12+
13+
if ( head === null ) break ;
14+
15+
buckets[ key( head.value ) ].last.next = head ;
16+
17+
}
18+
19+
} ;
20+
21+
exports.scatter = scatter ;

js/src/stack/gather.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
3+
let gather = function ( main , buckets , bi , bj ) {
4+
5+
while ( --bj >= bi ) {
6+
7+
let bucket = buckets[bj] ;
8+
9+
while ( !bucket.empty( ) ) main.push( bucket.pop( ) ) ;
10+
11+
}
12+
13+
} ;
14+
15+
exports.gather = gather ;

js/src/stack/scatter.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
3+
let scatter = function ( key , main , buckets ) {
4+
5+
while ( !main.empty( ) ) {
6+
7+
let x = main.pop( ) ;
8+
9+
buckets[ key( x ) ].push( x ) ;
10+
11+
}
12+
13+
} ;
14+
15+
exports.scatter = scatter ;

pkg.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@
1313
"debug": false,
1414
"src": "js/src/",
1515
"out": "js/dist/",
16-
"name": "bucketsort"
17-
}
16+
"name": "bucketsort",
17+
"rec" : true,
18+
"babel": true
19+
}

0 commit comments

Comments
 (0)