OSDN Git Service

fix X.UA & X.Audio, add X.KB.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 12_XClosure.js
similarity index 65%
rename from 0.6.x/js/01_core/12_Closure.js
rename to 0.6.x/js/01_core/12_XClosure.js
index 5d90451..82ff4a9 100644 (file)
@@ -1,31 +1,27 @@
 var \r
-       X_Callback_LIVE_LIST        = [],\r
+       X_CLOSURE_LIVE_LIST     = [],\r
 \r
-       X_Callback_POOL_LIST        = [],\r
+       X_CLOSURE_POOL_LIST     = [],\r
 \r
-       X_Closure_COMMAND_BACK      = X_Callback_LIVE_LIST,\r
+       X_Closure_COMMAND_BACK  = X_CLOSURE_LIVE_LIST,\r
 \r
-       X_Closure_COMMAND_DROP      = X_Callback_POOL_LIST,\r
+       X_Closure_COMMAND_DROP  = X_CLOSURE_POOL_LIST,\r
        \r
-       /** @const */\r
-       X_Callback_THIS_FUNC        = 1,\r
-       /** @const */\r
-       X_Callback_HANDLEEVENT      = 2,\r
-       /** @const */\r
-       X_Callback_FUNC_ONLY        = 3,\r
-       /** @const */\r
-       X_Callback_THIS_FUNCNAME    = 4;\r
+       X_CLOSURE_THIS_FUNC     = 1,\r
+       X_CLOSURE_HANDLEEVENT   = 2,\r
+       X_CLOSURE_FUNC_ONLY     = 3,\r
+       X_CLOSURE_THIS_FUNCNAME = 4;\r
 \r
 /**\r
  * <p>クロージャに関するポリシーと再利用可能クロージャについて次の記事をご覧ください。\r
  *     <a href="http://outcloud.blogspot.jp/2015/05/reusable-closure.html" target="_blank">再利用できるクロージャを使ったWebアプリケーション開発</a>\r
  * \r
  * <h5>再利用可能クロージャの作成</h5>\r
- * X_Callback_create() で再利用可能なクロージャの作成。次のパターンで呼び出します。<br>\r
+ * X_Closure_create() で再利用可能なクロージャの作成。次のパターンで呼び出します。<br>\r
  * 最大で三つの引数を並べる一連のパターンは、 EventDispatcher.listen unlisten, listening や X.Timer.add, once でも使われますので、ここでよく目を通しておきます。\r
  * \r
  * <h5>再利用可能クロージャの破棄と再利用</h5>\r
- * X_Callback_correct() によってクロージャは回収され再利用に備えます。<br>\r
+ * X_Closure_correct() によってクロージャは回収され再利用に備えます。<br>\r
  * 実は、クロージャが束縛するのは、this コンテキストやコールバック関数といった、<strong>そのもの</strong>ではなく、それらを一定のルールで格納したハッシュです。<br>\r
  * このハッシュはクロージャに与えた後も、適宜に取得が可能です。このハッシュのメンバーを書き換えることで、クロージャの this コンテキストやコールバック関数を書き換えています。\r
  * \r
@@ -41,7 +37,7 @@ var __CallbackHash__ =
         * コールバックの種類を表す数値。 this + function, this.handleEvent, function only がある。\r
         * @type {number} \r
         */\r
-       kind : X_Callback_THIS_FUNC,\r
+       kind : X_CLOSURE_THIS_FUNC,\r
        /**\r
         * コールバック。\r
         * @type {funciton|undefined} \r
@@ -66,21 +62,21 @@ var __CallbackHash__ =
         * __CallbackHash__ の情報を元に、コールバックを実施するプロキシ。\r
         * @type {Function}\r
         */\r
-       proxy : X_Callback_proxyCallback\r
+       proxy : X_Closure_proxyCallback\r
 };\r
 \r
 // ------------------------------------------------------------------------- //\r
 // --- implements ---------------------------------------------------------- //\r
 // ------------------------------------------------------------------------- //\r
 \r
-function X_Callback_create( thisObject, opt_callback, opt_args /* [ listener || ( context + function ) || function ][ args... ] */ ){\r
-       var obj = X_Callback_classifyCallbackArgs( thisObject, opt_callback, opt_args ),\r
+function X_Closure_create( thisObject, opt_callback, opt_args /* [ listener || ( context + function ) || function ][ args... ] */ ){\r
+       var obj = X_Closure_classifyCallbackArgs( thisObject, opt_callback, opt_args ),\r
                l, ret, _obj;\r
        \r
        if( !obj.kind ) return obj;\r
        \r
-       if( l = X_Callback_POOL_LIST.length ){\r
-               ret  = X_Callback_POOL_LIST[ l - 1 ]; --X_Callback_POOL_LIST.length; // ret = X_Callback_POOL_LIST.pop();\r
+       if( l = X_CLOSURE_POOL_LIST.length ){\r
+               ret  = X_CLOSURE_POOL_LIST[ l - 1 ]; --X_CLOSURE_POOL_LIST.length; // ret = X_CLOSURE_POOL_LIST.pop();\r
                _obj = ret( X_Closure_COMMAND_BACK );\r
                \r
                _obj.kind       = obj.kind;\r
@@ -88,52 +84,52 @@ function X_Callback_create( thisObject, opt_callback, opt_args /* [ listener ||
                _obj.func       = obj.func;\r
                _obj.context    = obj.context;\r
                _obj.supplement = obj.supplement;\r
-               _obj.proxy      = X_Callback_proxyCallback;\r
+               _obj.proxy      = X_Closure_proxyCallback;\r
        } else {\r
-               ret             = X_Callback_actualClosure( obj );\r
-               obj.proxy       = X_Callback_proxyCallback;\r
+               ret             = X_Closure_actualClosure( obj );\r
+               obj.proxy       = X_Closure_proxyCallback;\r
        };\r
-       X_Callback_LIVE_LIST[ X_Callback_LIVE_LIST.length ] = ret;\r
+       X_CLOSURE_LIVE_LIST[ X_CLOSURE_LIVE_LIST.length ] = ret;\r
        return ret;\r
 };\r
 \r
 \r
-function X_Callback_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){\r
+function X_Closure_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){\r
        var obj;\r
        \r
        if( X_Type_isObject( arg1 ) && X_Type_isFunction( arg2 ) ){\r
-               obj  = { context : arg1, func : arg2, kind : X_Callback_THIS_FUNC };\r
+               obj  = { context : arg1, func : arg2, kind : X_CLOSURE_THIS_FUNC };\r
        } else\r
        if( X_Type_isObject( arg1 ) ){\r
                if( arg2 && X_Type_isString( arg2 ) ){\r
-                       obj  = { context : arg1, name : arg2, kind : X_Callback_THIS_FUNCNAME };\r
+                       obj  = { context : arg1, name : arg2, kind : X_CLOSURE_THIS_FUNCNAME };\r
                } else {\r
-                       obj  = { context : arg1, kind : X_Callback_HANDLEEVENT };\r
+                       obj  = { context : arg1, kind : X_CLOSURE_HANDLEEVENT };\r
                        arg3 = arg2;                    \r
                };\r
        } else\r
        if( X_Type_isFunction( arg1 ) ){\r
                arg3 = arg2;\r
                if( alt_context ){\r
-                       obj  = { context : alt_context, func : arg1, kind : X_Callback_THIS_FUNC };\r
+                       obj  = { context : alt_context, func : arg1, kind : X_CLOSURE_THIS_FUNC };\r
                } else {\r
-                       obj  = { func : arg1, kind : X_Callback_FUNC_ONLY };\r
+                       obj  = { func : arg1, kind : X_CLOSURE_FUNC_ONLY };\r
                };\r
        } else\r
        if( X_Type_isFunction( arg2 ) ){\r
-               //console.log( 'X_Callback_classifyCallbackArgs : arg1 が ' + arg1 + 'です' ); ie4 で error\r
+               //console.log( 'X_Closure_classifyCallbackArgs : arg1 が ' + arg1 + 'です' ); ie4 で error\r
                if( alt_context ){\r
-                       obj  = { context : alt_context, func : arg2, kind : X_Callback_THIS_FUNC };\r
+                       obj  = { context : alt_context, func : arg2, kind : X_CLOSURE_THIS_FUNC };\r
                } else {\r
-                       obj  = { func : arg2, kind : X_Callback_FUNC_ONLY };\r
+                       obj  = { func : arg2, kind : X_CLOSURE_FUNC_ONLY };\r
                };\r
        } else\r
        if( alt_context && X_Type_isString( arg1 ) ){\r
                arg3 = arg2;\r
-               obj  = { context : alt_context, name : arg1, kind : X_Callback_THIS_FUNCNAME };\r
+               obj  = { context : alt_context, name : arg1, kind : X_CLOSURE_THIS_FUNCNAME };\r
        } else\r
        if( alt_context ){\r
-               obj  = { context : alt_context, kind : X_Callback_HANDLEEVENT };\r
+               obj  = { context : alt_context, kind : X_CLOSURE_HANDLEEVENT };\r
                arg3 = arg1;\r
        } else {\r
                console.log( '不正 ' + arg1 );\r
@@ -147,14 +143,14 @@ function X_Callback_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){
        return ( obj.context || obj.supplement ) ? obj : arg1;\r
 };\r
 \r
-function X_Callback_actualClosure( obj ){\r
+function X_Closure_actualClosure( obj ){\r
        return function(){\r
                if( arguments[ 0 ] === X_Closure_COMMAND_BACK ) return obj;\r
                if( arguments[ 0 ] !== X_Closure_COMMAND_DROP ) return obj.proxy && obj.proxy( obj, arguments );\r
        };\r
 };\r
 \r
-function X_Callback_proxyCallback( xfunc, _args ){\r
+function X_Closure_proxyCallback( xfunc, _args ){\r
        var args    = _args || [],\r
                thisObj = xfunc.context,\r
                func    = xfunc.func,\r
@@ -177,12 +173,12 @@ function X_Callback_proxyCallback( xfunc, _args ){
        \r
        switch( xfunc.kind ){\r
 \r
-               case X_Callback_THIS_FUNC :\r
+               case X_CLOSURE_THIS_FUNC :\r
                        return args.length === 0 ? func.call( thisObj ) : func.apply( thisObj, args );\r
                \r
-               case X_Callback_THIS_FUNCNAME :\r
+               case X_CLOSURE_THIS_FUNCNAME :\r
                        funcName = xfunc.name;\r
-               case X_Callback_HANDLEEVENT :\r
+               case X_CLOSURE_HANDLEEVENT :\r
                        funcName = funcName || 'handleEvent';\r
                        temp = thisObj[ funcName ];\r
                        if( X_Type_isFunction( temp ) ){\r
@@ -199,40 +195,49 @@ function X_Callback_proxyCallback( xfunc, _args ){
                        };\r
                        return args.length === 0 ? func.call( thisObj ) : func.apply( thisObj, args );*/\r
                                                \r
-               case X_Callback_FUNC_ONLY :\r
+               case X_CLOSURE_FUNC_ONLY :\r
                        return args.length === 0 ?\r
                                        func() :\r
                                args.length === 1 ?\r
                                        func( args[ 0 ] ) :\r
                                        func.apply( null, args );\r
        };\r
-       return X_Callback_NONE;\r
+       return X_CALLBACK_NONE;\r
 };\r
 \r
-function X_Callback_correct( f ){\r
-       var i = X_Callback_LIVE_LIST.indexOf( f ),\r
+function X_Closure_correct( f ){\r
+       var i = X_CLOSURE_LIVE_LIST.indexOf( f ),\r
                obj;\r
        if( i !== -1 ){\r
-               X_Callback_LIVE_LIST.splice( i, 1 );\r
-               X_Callback_POOL_LIST[ X_Callback_POOL_LIST.length ] = f;\r
+               X_CLOSURE_LIVE_LIST.splice( i, 1 );\r
+               X_CLOSURE_POOL_LIST[ X_CLOSURE_POOL_LIST.length ] = f;\r
                obj = f( X_Closure_COMMAND_BACK );\r
+               /*\r
                delete obj.kind;\r
                if( obj.name ) delete obj.name;\r
                if( obj.func ) delete obj.func;\r
                if( obj.context ) delete obj.context;\r
                if( obj.supplement ) delete obj.supplement;\r
-               delete obj.proxy;\r
+               delete obj.proxy; */\r
+               X_Object_clear( obj );\r
                return true;\r
        };\r
        return false;\r
 };\r
 \r
-function X_Callback_monitor(){\r
+function X_Closure_monitor(){\r
        return {\r
-               'Callback:Live' : X_Callback_LIVE_LIST.length,\r
-               'Callback:Pool' : X_Callback_POOL_LIST.length\r
+               'Callback:Live' : X_CLOSURE_LIVE_LIST.length,\r
+               'Callback:Pool' : X_CLOSURE_POOL_LIST.length\r
        };\r
 };\r
-function X_Callback_gc(){\r
-       X_Callback_POOL_LIST.length = 0; // ?\r
-};
\ No newline at end of file
+function X_Closure_gc(){\r
+       X_CLOSURE_POOL_LIST.length = 0; // ?\r
+};\r
+\r
+X_TEMP.onSystemReady.push( function( sys ){\r
+       sys.monitor( X_Closure_monitor );\r
+       sys.gc( X_Closure_gc );\r
+});\r
+\r
+\r