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