OSDN Git Service

Version 0.6.159, fix X.Class & X.XHR.Gadget.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 09_XPair.js
index 14cd864..c0c3cd8 100644 (file)
@@ -1,3 +1,8 @@
+/**\r
+ * Object(Array|Function)をキーにする、キーバリューストアを作る。js 自体にオブジェクトをキーとするハッシュの機能は無い為、内部はArrayで代用している。そのため値へのアクセスは低速。\r
+ * 値を隠蔽したい場合に加え、速度が問題にならないケースや、速度対策を実施したうえで使用する。\r
+ * @namespace X.Pair\r
+ */\r
 X[ 'Pair' ] = {\r
        'create'  : X_Pair_create,\r
        \r
@@ -6,7 +11,7 @@ X[ 'Pair' ] = {
        'release' : X_Pair_release\r
 };\r
 \r
-var X_Pair_SIZE            = 1000,\r
+var X_Pair_SIZE            = 1024,\r
        X_Pair_KEY_STORE_LIST  = [[]],\r
        X_Pair_PAIR_STORE_LIST = [[]],\r
        X_Pair_noChashe        = false,\r
@@ -27,12 +32,19 @@ var X_Pair_SIZE            = 1000,
        // TODO キャッシュするペアの数とヒット率、探索時間の記録\r
        X_Pair_lastKey, X_Pair_lastPair;\r
 \r
+/**\r
+ * Object(Array|Function)をキーとして値を登録。すでにキーが登録されている場合は登録できない。\r
+ * @alias X.Pair.create\r
+ * @param {object|function|array} key\r
+ * @param {*} pair == false な値は不可\r
+ * @return {boolean} true の場合、登録成功\r
+ */\r
 function X_Pair_create( key, pair ){\r
        var keyStore  = X_Pair_KEY_STORE_LIST[ X_Pair_KEY_STORE_LIST.length - 1 ],\r
                pairStore = X_Pair_PAIR_STORE_LIST[ X_Pair_PAIR_STORE_LIST.length - 1 ];\r
        \r
        X_Pair_noChashe = true;\r
-       if( X_Pair_get( key ) || !( X_Type_isObject( key ) || X_Type_isArray( key ) || X_Type_isFunction( key ) ) ) return;\r
+       if( !pair || X_Pair_get( key ) || !( X_Type_isObject( key ) || X_Type_isArray( key ) || X_Type_isFunction( key ) ) ) return false;\r
        \r
        if( keyStore.length === X_Pair_SIZE ){\r
                keyStore  = X_Pair_KEY_STORE_LIST[ X_Pair_KEY_STORE_LIST.length   ] = [];\r
@@ -41,8 +53,15 @@ function X_Pair_create( key, pair ){
        \r
        keyStore[  keyStore.length  ] = key;\r
        pairStore[ pairStore.length ] = pair;\r
+       return true;\r
 };\r
 \r
+/**\r
+ * キーとペアになっている値の取得。\r
+ * @alias X.Pair.get\r
+ * @param {object|function|array} key\r
+ * @return {*}\r
+ */\r
 function X_Pair_get( key ){\r
        var chashe = !X_Pair_noChashe, pair;\r
        \r
@@ -56,6 +75,13 @@ function X_Pair_get( key ){
        return pair;\r
 };\r
 \r
+/**\r
+ * キー/バリューのペアを解消する。バリューは指定しなくても可。\r
+ * @alias X.Pair.release\r
+ * @param {object|function|array} key\r
+ * @param {*} [pair=]\r
+ * @return {boolean} true の場合解除成功\r
+ */\r
 function X_Pair_release( key, opt_pair ){\r
        var i = 0,\r
                l = X_Pair_KEY_STORE_LIST.length,\r
@@ -71,7 +97,8 @@ function X_Pair_release( key, opt_pair ){
                        if( X_Pair_lastKey === key ){\r
                                X_Pair_lastKey = X_Pair_lastPair = null;\r
                        };\r
-                       break;\r
+                       return true;\r
                };\r
        };\r
+       return false;\r
 };\r