+/**\r
+ * Object(Array|Function)をキーにする、キーバリューストアを作る。js 自体にオブジェクトをキーとするハッシュの機能は無い為、内部はArrayで代用している。そのため値へのアクセスは低速。\r
+ * 値を隠蔽したい場合に加え、速度が問題にならないケースや、速度対策を実施したうえで使用する。\r
+ * @namespace X.Pair\r
+ */\r
X[ 'Pair' ] = {\r
'create' : X_Pair_create,\r
\r
'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
// 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
\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
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
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