471 lines
13 KiB
JavaScript
Executable File
471 lines
13 KiB
JavaScript
Executable File
// Compiled by ClojureScript 1.11.60 {:static-fns true, :optimize-constants true, :optimizations :advanced}
|
|
goog.provide('cljs.core.async.impl.timers');
|
|
goog.require('cljs.core');
|
|
goog.require('cljs.core.constants');
|
|
goog.require('cljs.core.async.impl.protocols');
|
|
goog.require('cljs.core.async.impl.channels');
|
|
goog.require('cljs.core.async.impl.dispatch');
|
|
cljs.core.async.impl.timers.MAX_LEVEL = (15);
|
|
cljs.core.async.impl.timers.P = ((1) / (2));
|
|
cljs.core.async.impl.timers.random_level = (function cljs$core$async$impl$timers$random_level(var_args){
|
|
var G__8836 = arguments.length;
|
|
switch (G__8836) {
|
|
case 0:
|
|
return cljs.core.async.impl.timers.random_level.cljs$core$IFn$_invoke$arity$0();
|
|
|
|
break;
|
|
case 1:
|
|
return cljs.core.async.impl.timers.random_level.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
|
|
|
|
break;
|
|
default:
|
|
throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
|
|
|
|
}
|
|
});
|
|
|
|
(cljs.core.async.impl.timers.random_level.cljs$core$IFn$_invoke$arity$0 = (function (){
|
|
return cljs.core.async.impl.timers.random_level.cljs$core$IFn$_invoke$arity$1((0));
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.random_level.cljs$core$IFn$_invoke$arity$1 = (function (level){
|
|
while(true){
|
|
if((((Math.random() < cljs.core.async.impl.timers.P)) && ((level < cljs.core.async.impl.timers.MAX_LEVEL)))){
|
|
var G__8838 = (level + (1));
|
|
level = G__8838;
|
|
continue;
|
|
} else {
|
|
return level;
|
|
}
|
|
break;
|
|
}
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.random_level.cljs$lang$maxFixedArity = 1);
|
|
|
|
|
|
/**
|
|
* @constructor
|
|
* @implements {cljs.core.ISeqable}
|
|
* @implements {cljs.core.IPrintWithWriter}
|
|
*/
|
|
cljs.core.async.impl.timers.SkipListNode = (function (key,val,forward){
|
|
this.key = key;
|
|
this.val = val;
|
|
this.forward = forward;
|
|
this.cljs$lang$protocol_mask$partition0$ = 2155872256;
|
|
this.cljs$lang$protocol_mask$partition1$ = 0;
|
|
});
|
|
(cljs.core.async.impl.timers.SkipListNode.prototype.cljs$core$ISeqable$_seq$arity$1 = (function (coll){
|
|
var self__ = this;
|
|
var coll__$1 = this;
|
|
return (new cljs.core.List(null,self__.key,(new cljs.core.List(null,self__.val,null,(1),null)),(2),null));
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipListNode.prototype.cljs$core$IPrintWithWriter$_pr_writer$arity$3 = (function (coll,writer,opts){
|
|
var self__ = this;
|
|
var coll__$1 = this;
|
|
return cljs.core.pr_sequential_writer(writer,cljs.core.pr_writer,"["," ","]",opts,coll__$1);
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipListNode.getBasis = (function (){
|
|
return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.cst$sym$key,cljs.core.with_meta(cljs.core.cst$sym$val,new cljs.core.PersistentArrayMap(null, 1, [cljs.core.cst$kw$mutable,true], null)),cljs.core.cst$sym$forward], null);
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipListNode.cljs$lang$type = true);
|
|
|
|
(cljs.core.async.impl.timers.SkipListNode.cljs$lang$ctorStr = "cljs.core.async.impl.timers/SkipListNode");
|
|
|
|
(cljs.core.async.impl.timers.SkipListNode.cljs$lang$ctorPrWriter = (function (this__5330__auto__,writer__5331__auto__,opt__5332__auto__){
|
|
return cljs.core._write(writer__5331__auto__,"cljs.core.async.impl.timers/SkipListNode");
|
|
}));
|
|
|
|
/**
|
|
* Positional factory function for cljs.core.async.impl.timers/SkipListNode.
|
|
*/
|
|
cljs.core.async.impl.timers.__GT_SkipListNode = (function cljs$core$async$impl$timers$__GT_SkipListNode(key,val,forward){
|
|
return (new cljs.core.async.impl.timers.SkipListNode(key,val,forward));
|
|
});
|
|
|
|
cljs.core.async.impl.timers.skip_list_node = (function cljs$core$async$impl$timers$skip_list_node(var_args){
|
|
var G__8840 = arguments.length;
|
|
switch (G__8840) {
|
|
case 1:
|
|
return cljs.core.async.impl.timers.skip_list_node.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
|
|
|
|
break;
|
|
case 3:
|
|
return cljs.core.async.impl.timers.skip_list_node.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));
|
|
|
|
break;
|
|
default:
|
|
throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
|
|
|
|
}
|
|
});
|
|
|
|
(cljs.core.async.impl.timers.skip_list_node.cljs$core$IFn$_invoke$arity$1 = (function (level){
|
|
return cljs.core.async.impl.timers.skip_list_node.cljs$core$IFn$_invoke$arity$3(null,null,level);
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.skip_list_node.cljs$core$IFn$_invoke$arity$3 = (function (k,v,level){
|
|
var arr = (new Array((level + (1))));
|
|
var i_8842 = (0);
|
|
while(true){
|
|
if((i_8842 < arr.length)){
|
|
(arr[i_8842] = null);
|
|
|
|
var G__8843 = (i_8842 + (1));
|
|
i_8842 = G__8843;
|
|
continue;
|
|
} else {
|
|
}
|
|
break;
|
|
}
|
|
|
|
return (new cljs.core.async.impl.timers.SkipListNode(k,v,arr));
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.skip_list_node.cljs$lang$maxFixedArity = 3);
|
|
|
|
cljs.core.async.impl.timers.least_greater_node = (function cljs$core$async$impl$timers$least_greater_node(var_args){
|
|
var G__8845 = arguments.length;
|
|
switch (G__8845) {
|
|
case 3:
|
|
return cljs.core.async.impl.timers.least_greater_node.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));
|
|
|
|
break;
|
|
case 4:
|
|
return cljs.core.async.impl.timers.least_greater_node.cljs$core$IFn$_invoke$arity$4((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]));
|
|
|
|
break;
|
|
default:
|
|
throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
|
|
|
|
}
|
|
});
|
|
|
|
(cljs.core.async.impl.timers.least_greater_node.cljs$core$IFn$_invoke$arity$3 = (function (x,k,level){
|
|
return cljs.core.async.impl.timers.least_greater_node.cljs$core$IFn$_invoke$arity$4(x,k,level,null);
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.least_greater_node.cljs$core$IFn$_invoke$arity$4 = (function (x,k,level,update){
|
|
while(true){
|
|
if((!((level < (0))))){
|
|
var x__$1 = (function (){var x__$1 = x;
|
|
while(true){
|
|
var temp__4655__auto__ = (x__$1.forward[level]);
|
|
if(cljs.core.truth_(temp__4655__auto__)){
|
|
var x_SINGLEQUOTE_ = temp__4655__auto__;
|
|
if((x_SINGLEQUOTE_.key < k)){
|
|
var G__8847 = x_SINGLEQUOTE_;
|
|
x__$1 = G__8847;
|
|
continue;
|
|
} else {
|
|
return x__$1;
|
|
}
|
|
} else {
|
|
return x__$1;
|
|
}
|
|
break;
|
|
}
|
|
})();
|
|
if((update == null)){
|
|
} else {
|
|
(update[level] = x__$1);
|
|
}
|
|
|
|
var G__8848 = x__$1;
|
|
var G__8849 = k;
|
|
var G__8850 = (level - (1));
|
|
var G__8851 = update;
|
|
x = G__8848;
|
|
k = G__8849;
|
|
level = G__8850;
|
|
update = G__8851;
|
|
continue;
|
|
} else {
|
|
return x;
|
|
}
|
|
break;
|
|
}
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.least_greater_node.cljs$lang$maxFixedArity = 4);
|
|
|
|
|
|
/**
|
|
* @constructor
|
|
* @implements {cljs.core.async.impl.timers.Object}
|
|
* @implements {cljs.core.ISeqable}
|
|
* @implements {cljs.core.IPrintWithWriter}
|
|
*/
|
|
cljs.core.async.impl.timers.SkipList = (function (header,level){
|
|
this.header = header;
|
|
this.level = level;
|
|
this.cljs$lang$protocol_mask$partition0$ = 2155872256;
|
|
this.cljs$lang$protocol_mask$partition1$ = 0;
|
|
});
|
|
(cljs.core.async.impl.timers.SkipList.prototype.put = (function (k,v){
|
|
var self__ = this;
|
|
var coll = this;
|
|
var update = (new Array(cljs.core.async.impl.timers.MAX_LEVEL));
|
|
var x = cljs.core.async.impl.timers.least_greater_node.cljs$core$IFn$_invoke$arity$4(self__.header,k,self__.level,update);
|
|
var x__$1 = (x.forward[(0)]);
|
|
if((((!((x__$1 == null)))) && ((x__$1.key === k)))){
|
|
return (x__$1.val = v);
|
|
} else {
|
|
var new_level = cljs.core.async.impl.timers.random_level.cljs$core$IFn$_invoke$arity$0();
|
|
if((new_level > self__.level)){
|
|
var i_8852 = (self__.level + (1));
|
|
while(true){
|
|
if((i_8852 <= (new_level + (1)))){
|
|
(update[i_8852] = self__.header);
|
|
|
|
var G__8853 = (i_8852 + (1));
|
|
i_8852 = G__8853;
|
|
continue;
|
|
} else {
|
|
}
|
|
break;
|
|
}
|
|
|
|
(self__.level = new_level);
|
|
} else {
|
|
}
|
|
|
|
var x__$2 = cljs.core.async.impl.timers.skip_list_node.cljs$core$IFn$_invoke$arity$3(k,v,(new Array(new_level)));
|
|
var i = (0);
|
|
while(true){
|
|
if((i <= self__.level)){
|
|
var links = (update[i]).forward;
|
|
(x__$2.forward[i] = (links[i]));
|
|
|
|
return (links[i] = x__$2);
|
|
} else {
|
|
return null;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipList.prototype.remove = (function (k){
|
|
var self__ = this;
|
|
var coll = this;
|
|
var update = (new Array(cljs.core.async.impl.timers.MAX_LEVEL));
|
|
var x = cljs.core.async.impl.timers.least_greater_node.cljs$core$IFn$_invoke$arity$4(self__.header,k,self__.level,update);
|
|
var x__$1 = (x.forward[(0)]);
|
|
if((((!((x__$1 == null)))) && ((x__$1.key === k)))){
|
|
var i_8854 = (0);
|
|
while(true){
|
|
if((i_8854 <= self__.level)){
|
|
var links_8855 = (update[i_8854]).forward;
|
|
if(((links_8855[i_8854]) === x__$1)){
|
|
(links_8855[i_8854] = (x__$1.forward[i_8854]));
|
|
|
|
var G__8856 = (i_8854 + (1));
|
|
i_8854 = G__8856;
|
|
continue;
|
|
} else {
|
|
var G__8857 = (i_8854 + (1));
|
|
i_8854 = G__8857;
|
|
continue;
|
|
}
|
|
} else {
|
|
}
|
|
break;
|
|
}
|
|
|
|
while(true){
|
|
if((((self__.level > (0))) && (((self__.header.forward[self__.level]) == null)))){
|
|
(self__.level = (self__.level - (1)));
|
|
|
|
continue;
|
|
} else {
|
|
return null;
|
|
}
|
|
break;
|
|
}
|
|
} else {
|
|
return null;
|
|
}
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipList.prototype.ceilingEntry = (function (k){
|
|
var self__ = this;
|
|
var coll = this;
|
|
var x = self__.header;
|
|
var level__$1 = self__.level;
|
|
while(true){
|
|
if((!((level__$1 < (0))))){
|
|
var nx = (function (){var x__$1 = x;
|
|
while(true){
|
|
var x_SINGLEQUOTE_ = (x__$1.forward[level__$1]);
|
|
if((x_SINGLEQUOTE_ == null)){
|
|
return null;
|
|
} else {
|
|
if((x_SINGLEQUOTE_.key >= k)){
|
|
return x_SINGLEQUOTE_;
|
|
} else {
|
|
var G__8858 = x_SINGLEQUOTE_;
|
|
x__$1 = G__8858;
|
|
continue;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
})();
|
|
if((!((nx == null)))){
|
|
var G__8859 = nx;
|
|
var G__8860 = (level__$1 - (1));
|
|
x = G__8859;
|
|
level__$1 = G__8860;
|
|
continue;
|
|
} else {
|
|
var G__8861 = x;
|
|
var G__8862 = (level__$1 - (1));
|
|
x = G__8861;
|
|
level__$1 = G__8862;
|
|
continue;
|
|
}
|
|
} else {
|
|
if((x === self__.header)){
|
|
return null;
|
|
} else {
|
|
return x;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipList.prototype.floorEntry = (function (k){
|
|
var self__ = this;
|
|
var coll = this;
|
|
var x = self__.header;
|
|
var level__$1 = self__.level;
|
|
while(true){
|
|
if((!((level__$1 < (0))))){
|
|
var nx = (function (){var x__$1 = x;
|
|
while(true){
|
|
var x_SINGLEQUOTE_ = (x__$1.forward[level__$1]);
|
|
if((!((x_SINGLEQUOTE_ == null)))){
|
|
if((x_SINGLEQUOTE_.key > k)){
|
|
return x__$1;
|
|
} else {
|
|
var G__8863 = x_SINGLEQUOTE_;
|
|
x__$1 = G__8863;
|
|
continue;
|
|
}
|
|
} else {
|
|
if((level__$1 === (0))){
|
|
return x__$1;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
})();
|
|
if(cljs.core.truth_(nx)){
|
|
var G__8864 = nx;
|
|
var G__8865 = (level__$1 - (1));
|
|
x = G__8864;
|
|
level__$1 = G__8865;
|
|
continue;
|
|
} else {
|
|
var G__8866 = x;
|
|
var G__8867 = (level__$1 - (1));
|
|
x = G__8866;
|
|
level__$1 = G__8867;
|
|
continue;
|
|
}
|
|
} else {
|
|
if((x === self__.header)){
|
|
return null;
|
|
} else {
|
|
return x;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipList.prototype.cljs$core$ISeqable$_seq$arity$1 = (function (coll){
|
|
var self__ = this;
|
|
var coll__$1 = this;
|
|
var iter = (function cljs$core$async$impl$timers$iter(node){
|
|
return (new cljs.core.LazySeq(null,(function (){
|
|
if((node == null)){
|
|
return null;
|
|
} else {
|
|
return cljs.core.cons(new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [node.key,node.val], null),cljs$core$async$impl$timers$iter((node.forward[(0)])));
|
|
}
|
|
}),null,null));
|
|
});
|
|
return iter((self__.header.forward[(0)]));
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipList.prototype.cljs$core$IPrintWithWriter$_pr_writer$arity$3 = (function (coll,writer,opts){
|
|
var self__ = this;
|
|
var coll__$1 = this;
|
|
var pr_pair = (function (keyval){
|
|
return cljs.core.pr_sequential_writer(writer,cljs.core.pr_writer,""," ","",opts,keyval);
|
|
});
|
|
return cljs.core.pr_sequential_writer(writer,pr_pair,"{",", ","}",opts,coll__$1);
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipList.getBasis = (function (){
|
|
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.cst$sym$header,cljs.core.with_meta(cljs.core.cst$sym$level,new cljs.core.PersistentArrayMap(null, 1, [cljs.core.cst$kw$mutable,true], null))], null);
|
|
}));
|
|
|
|
(cljs.core.async.impl.timers.SkipList.cljs$lang$type = true);
|
|
|
|
(cljs.core.async.impl.timers.SkipList.cljs$lang$ctorStr = "cljs.core.async.impl.timers/SkipList");
|
|
|
|
(cljs.core.async.impl.timers.SkipList.cljs$lang$ctorPrWriter = (function (this__5330__auto__,writer__5331__auto__,opt__5332__auto__){
|
|
return cljs.core._write(writer__5331__auto__,"cljs.core.async.impl.timers/SkipList");
|
|
}));
|
|
|
|
/**
|
|
* Positional factory function for cljs.core.async.impl.timers/SkipList.
|
|
*/
|
|
cljs.core.async.impl.timers.__GT_SkipList = (function cljs$core$async$impl$timers$__GT_SkipList(header,level){
|
|
return (new cljs.core.async.impl.timers.SkipList(header,level));
|
|
});
|
|
|
|
cljs.core.async.impl.timers.skip_list = (function cljs$core$async$impl$timers$skip_list(){
|
|
return (new cljs.core.async.impl.timers.SkipList(cljs.core.async.impl.timers.skip_list_node.cljs$core$IFn$_invoke$arity$1((0)),(0)));
|
|
});
|
|
cljs.core.async.impl.timers.timeouts_map = cljs.core.async.impl.timers.skip_list();
|
|
cljs.core.async.impl.timers.TIMEOUT_RESOLUTION_MS = (10);
|
|
/**
|
|
* returns a channel that will close after msecs
|
|
*/
|
|
cljs.core.async.impl.timers.timeout = (function cljs$core$async$impl$timers$timeout(msecs){
|
|
var timeout = ((new Date()).valueOf() + msecs);
|
|
var me = cljs.core.async.impl.timers.timeouts_map.ceilingEntry(timeout);
|
|
var or__5045__auto__ = (cljs.core.truth_((function (){var and__5043__auto__ = me;
|
|
if(cljs.core.truth_(and__5043__auto__)){
|
|
return (me.key < (timeout + cljs.core.async.impl.timers.TIMEOUT_RESOLUTION_MS));
|
|
} else {
|
|
return and__5043__auto__;
|
|
}
|
|
})())?me.val:null);
|
|
if(cljs.core.truth_(or__5045__auto__)){
|
|
return or__5045__auto__;
|
|
} else {
|
|
var timeout_channel = cljs.core.async.impl.channels.chan.cljs$core$IFn$_invoke$arity$1(null);
|
|
cljs.core.async.impl.timers.timeouts_map.put(timeout,timeout_channel);
|
|
|
|
cljs.core.async.impl.dispatch.queue_delay((function (){
|
|
cljs.core.async.impl.timers.timeouts_map.remove(timeout);
|
|
|
|
return cljs.core.async.impl.protocols.close_BANG_(timeout_channel);
|
|
}),msecs);
|
|
|
|
return timeout_channel;
|
|
}
|
|
});
|