var i = 0,\r
c = next,\r
list = TICKET_LIST,\r
- queue, callback;\r
- for( ; i < list.length; ){\r
- queue = list[ i ];\r
- if( 0 < ( queue[ INDEX_LAST ] -= c ) ){\r
- ++i;\r
- continue;\r
- };\r
- callback = queue[ INDEX_CALLBACK ];\r
- c = queue[ INDEX_COUNT ];\r
- if( callback() === false || c === 1 ){\r
+ i = list.length,\r
+ queue, f, ret;\r
+ for( ; i; ){\r
+ queue = list[ --i ];\r
+ if( 0 < ( queue[ INDEX_LAST ] -= c ) ) continue;\r
+ f = queue[ INDEX_CALLBACK ];\r
+ c = queue[ INDEX_COUNT ];\r
+ ret = f();\r
+ if( ret === false || ret & X.Callback.UN_LISTEN || c === 1 ){\r
list.splice( i, 1 );\r
- callback.kill();\r
+ f.kill();\r
queue.length = 0;\r
continue;\r
} else\r
- if( 1 < c ){\r
- --queue[ INDEX_COUNT ];\r
- };\r
- ++i;\r
+ if( 1 < c ) --queue[ INDEX_COUNT ];\r
queue[ INDEX_LAST ] = queue[ INDEX_TIME ];\r
};\r
timerId = -1;\r
};\r
function update(){\r
var list = TICKET_LIST,\r
- l = list.length,\r
+ i = list.length,\r
n = 99999999,\r
last;\r
- if( l === 0 ){\r
+ if( i === 0 ){\r
timerId !== -1 && clearTimeout( timerId );\r
timerId = -1;\r
return;\r
};\r
- for( ; l; ){\r
- last = list[ --l ][ INDEX_LAST ];\r
+ for( ; i; ){\r
+ last = list[ --i ][ INDEX_LAST ];\r
if( last < n ) n = last;\r
};\r
if( n < next || timerId === -1 ){\r
};\r
\r
return {\r
- add : function( time, count, args1, args2, args3 ){\r
- if( time < INTERVAL_TIME ) time = INTERVAL_TIME;\r
- time = Math.floor( time / INTERVAL_TIME );\r
- var callback,\r
- list = TICKET_LIST,\r
- l = list.length,\r
- i = l,\r
- queue, args;\r
- if( typeof count !== 'number' || count < 0 ){\r
- count = 0;\r
+ add : function( time, opt_count, args1, args2, args3 ){\r
+ time = time < INTERVAL_TIME ? 1 : ( time / INTERVAL_TIME ) | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
+\r
+ if( typeof opt_count !== 'number' ){\r
+ args3 = args2;\r
+ args2 = args1;\r
+ args1 = opt_count;\r
+ opt_count = 0;\r
};\r
- /*\r
- for( ; i; ){\r
- queue = list[ --i ];\r
- if( queue[ INDEX_CALLBACK ].same( args1, args2 ) === true ){\r
- queue[ INDEX_TIME ] = queue[ INDEX_LAST ] = time;\r
- queue[ INDEX_COUNT ] = count;\r
- update();\r
- return;\r
- };\r
- }; */ \r
\r
- list[ l ] = [ time, time, count, X.Callback.create( args1, args2, args3 ) ];\r
+ TICKET_LIST[ TICKET_LIST.length ] = [ time, time, opt_count, X.Callback.create( args1, args2, args3 ) ];\r
update();\r
},\r
once : function( time, args1, args2, args3 ){\r