1 |
|
2 | var Type = require('./type');
|
3 | var Node = require('./node');
|
4 | function State(){
|
5 | var t = time();
|
6 | if(last < t){
|
7 | return N = 0, last = t;
|
8 | }
|
9 | return last = t + ((N += 1) / D);
|
10 | }
|
11 | var time = Type.time.is, last = -Infinity, N = 0, D = 1000;
|
12 | State._ = '>';
|
13 | State.ify = function(n, f, s, v, soul){
|
14 | if(!n || !n[N_]){
|
15 | if(!soul){
|
16 | return;
|
17 | }
|
18 | n = Node.soul.ify(n, soul);
|
19 | }
|
20 | var tmp = obj_as(n[N_], State._);
|
21 | if(u !== f && f !== N_){
|
22 | if(num_is(s)){
|
23 | tmp[f] = s;
|
24 | }
|
25 | if(u !== v){
|
26 | n[f] = v;
|
27 | }
|
28 | }
|
29 | return n;
|
30 | }
|
31 | State.is = function(n, f, o){
|
32 | var tmp = (f && n && n[N_] && n[N_][State._]) || o;
|
33 | if(!tmp){ return }
|
34 | return num_is(tmp[f])? tmp[f] : -Infinity;
|
35 | }
|
36 | ;(function(){
|
37 | State.map = function(cb, s, as){ var u;
|
38 | var o = obj_is(o = cb || s)? o : null;
|
39 | cb = fn_is(cb = cb || s)? cb : null;
|
40 | if(o && !cb){
|
41 | s = num_is(s)? s : State();
|
42 | o[N_] = o[N_] || {};
|
43 | obj_map(o, map, {o:o,s:s});
|
44 | return o;
|
45 | }
|
46 | as = as || obj_is(s)? s : u;
|
47 | s = num_is(s)? s : State();
|
48 | return function(v, f, o, opt){
|
49 | if(!cb){
|
50 | map.call({o: o, s: s}, v,f);
|
51 | return v;
|
52 | }
|
53 | cb.call(as || this || {}, v, f, o, opt);
|
54 | if(obj_has(o,f) && u === o[f]){ return }
|
55 | map.call({o: o, s: s}, v,f);
|
56 | }
|
57 | }
|
58 | function map(v,f){
|
59 | if(N_ === f){ return }
|
60 | State.ify(this.o, f, this.s) ;
|
61 | }
|
62 | }());
|
63 | var obj = Type.obj, obj_as = obj.as, obj_has = obj.has, obj_is = obj.is, obj_map = obj.map;
|
64 | var num = Type.num, num_is = num.is;
|
65 | var fn = Type.fn, fn_is = fn.is;
|
66 | var N_ = Node._, u;
|
67 | module.exports = State;
|
68 | |
\ | No newline at end of file |