OSDN Git Service

Version 0.6.5
[pettanr/clientJs.git] / 0.6.x / js / core / 06_XTimer.js
index c8a2185..4412139 100644 (file)
@@ -19,25 +19,21 @@ X.Timer = ( function(){
                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
@@ -45,16 +41,16 @@ X.Timer = ( function(){
        };\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
@@ -65,29 +61,17 @@ X.Timer = ( function(){
        };\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