7 create : function( arg0, arg1, arg2 /* [ listener || ( context + function ) || function ][ args... ] */ ){
\r
8 var self = X.Callback,
\r
9 live = self._LIVE_LIST,
\r
10 f, listener, context, callback;
\r
11 if( typeof arg1 === 'function' ){
\r
15 if( typeof arg0 === 'function' ){
\r
19 if( arg0 && typeof arg0.handleEvent === 'function' ){
\r
23 //throw new Error( 'Callback.create() fail!' );
\r
26 f = self._POOL_LIST.pop();
\r
28 f = new Function( 'var a=arguments,f=a.callee;f.a=a;return f.c()' ); // f.t=this;
\r
29 f.kill = self._kill;
\r
30 f.same = self._same;
\r
32 live[ live.length ] = f;
\r
34 f.c = self._contextCallback;
\r
35 f.listener = listener;
\r
36 f.context = listener;
\r
37 f.callback = listener.handleEvent;
\r
40 f.c = self._contextCallback;
\r
41 f.context = context;
\r
42 f.callback = callback;
\r
44 f.c = self._generalCallback;
\r
45 f.callback = callback;
\r
48 if( arg2 && typeof arg2.length === 'number' ){
\r
54 var f = X.Callback.create.apply( null, arguments );
\r
58 find : function( arg0, arg1 /* [ listener || ( context + function ) || function ] */ ){
\r
59 var live = X.Callback._LIVE_LIST,
\r
61 listener, context, callback,
\r
63 if( typeof arg1 === 'function' ){
\r
67 if( typeof arg0 === 'function' ){
\r
70 if( arg0 && typeof arg0.handleEvent === 'function' ){
\r
76 if( listener && f.listener === listener ){
\r
79 if( context && f.context === context && f.callback === callback ){
\r
82 if( f.callback === callback ){
\r
88 _contextCallback : function(){
\r
95 s && s.push.apply( a, s );
\r
97 r = l === 0 ? c.call( x ) :
\r
98 l === 1 ? c.call( x, a[ 0 ] ) : c.apply( x, a );
\r
101 f.once && X.Callback._correct( f );
\r
104 _generalCallback : function(){
\r
110 s && s.push.apply( a, s );
\r
112 r = l === 0 ? c() :
\r
113 l === 1 ? c( a[ 0 ] ) : c.apply( null, a );
\r
116 f.once && X.Callback._correct( f );
\r
119 _kill : function(){
\r
120 X.Callback._correct( this );
\r
122 _same : function( arg0, arg1, arg2 ){
\r
123 var listener, context, callback,
\r
125 if( typeof arg1 === 'function' ){
\r
129 if( typeof arg0 === 'function' ){
\r
133 if( arg0 && typeof arg0.handleEvent === 'function' ){
\r
138 if( arg2 && f.add && f.add !== arg2 ){
\r
142 if( listener && f.listener === listener ){
\r
145 if( context && f.context === context && f.callback === callback ){
\r
148 if( f.callback === callback ){
\r
153 _correct : function( f ){
\r
154 var self = X.Callback,
\r
155 i = self._LIVE_LIST.indexOf( f );
\r
156 if( f.c ) delete f.c;
\r
157 if( f.listener ) delete f.listener;
\r
158 if( f.context ) delete f.context;
\r
159 if( f.callback ) delete f.callback;
\r
160 if( f.once ) delete f.once;
\r
161 if( f.add ) delete f.add;
\r
162 if( i === -1 ) return;
\r
163 self._LIVE_LIST.splice( i, 1 );
\r
164 self._POOL_LIST.push( f );
\r
166 sys_monitor : function(){
\r
168 'Live callback' : X.Callback._LIVE_LIST.length,
\r
169 'Pool callback' : X.Callback._POOL_LIST.length
\r
172 sys_gc : function(){
\r
173 var self = X.Callback,
\r
174 list = self._POOL_LIST, f;
\r
175 while( 0 < list.length ){
\r
177 self._correct( f );
\r