From: Kunal Mehta Date: Wed, 5 Nov 2014 21:48:29 +0000 (-0800) Subject: Move ArrayUtils into libs/ as there is nothing tying it to MediaWiki X-Git-Tag: 1.31.0-rc.0~13374 X-Git-Url: https://git.cyclocoop.org/%7B%24admin_url%7Dmembres/%7B%7B%20url_for%28%27vote%27%2C%20idvote=vote.voteid%29%20%7D%7D?a=commitdiff_plain;h=e1bd68f0327b7df6a57c679c6edcc044a34da076;p=lhc%2Fweb%2Fwiklou.git Move ArrayUtils into libs/ as there is nothing tying it to MediaWiki Change-Id: I6910c85279858895f5462324134bade580a0cae7 --- diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 2cb633555e..5024b7a437 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -675,6 +675,7 @@ $wgAutoloadLocalClasses = array( 'FormatJson' => 'includes/json/FormatJson.php', # includes/libs + 'ArrayUtils' => 'includes/libs/ArrayUtils.php', 'CSSMin' => 'includes/libs/CSSMin.php', 'GenericArrayObject' => 'includes/libs/GenericArrayObject.php', 'HashRing' => 'includes/libs/HashRing.php', @@ -1151,7 +1152,6 @@ $wgAutoloadLocalClasses = array( 'UploadStashNoSuchKeyException' => 'includes/upload/UploadStash.php', # includes/utils - 'ArrayUtils' => 'includes/utils/ArrayUtils.php', 'CdbException' => 'includes/utils/Cdb.php', 'CdbFunctions' => 'includes/utils/CdbPHP.php', 'CdbReader' => 'includes/utils/Cdb.php', diff --git a/includes/libs/ArrayUtils.php b/includes/libs/ArrayUtils.php new file mode 100644 index 0000000000..f93402108a --- /dev/null +++ b/includes/libs/ArrayUtils.php @@ -0,0 +1,187 @@ + $w ) { + $sum += $w; + # Do not return keys if they have 0 weight. + # Note that the "all 0 weight" case is handed above + if ( $w > 0 && $sum >= $rand ) { + break; + } + } + + return $i; + } + + /** + * Do a binary search, and return the index of the largest item that sorts + * less than or equal to the target value. + * + * @since 1.23 + * + * @param callable $valueCallback A function to call to get the value with + * a given array index. + * @param int $valueCount The number of items accessible via $valueCallback, + * indexed from 0 to $valueCount - 1 + * @param callable $comparisonCallback A callback to compare two values, returning + * -1, 0 or 1 in the style of strcmp(). + * @param string $target The target value to find. + * + * @return int|bool The item index of the lower bound, or false if the target value + * sorts before all items. + */ + public static function findLowerBound( $valueCallback, $valueCount, + $comparisonCallback, $target + ) { + if ( $valueCount === 0 ) { + return false; + } + + $min = 0; + $max = $valueCount; + do { + $mid = $min + ( ( $max - $min ) >> 1 ); + $item = call_user_func( $valueCallback, $mid ); + $comparison = call_user_func( $comparisonCallback, $target, $item ); + if ( $comparison > 0 ) { + $min = $mid; + } elseif ( $comparison == 0 ) { + $min = $mid; + break; + } else { + $max = $mid; + } + } while ( $min < $max - 1 ); + + if ( $min == 0 ) { + $item = call_user_func( $valueCallback, $min ); + $comparison = call_user_func( $comparisonCallback, $target, $item ); + if ( $comparison < 0 ) { + // Before the first item + return false; + } + } + return $min; + } + + /** + * Do array_diff_assoc() on multi-dimensional arrays. + * + * Note: empty arrays are removed. + * + * @since 1.23 + * + * @param array $array1 The array to compare from + * @param array $array2,... More arrays to compare against + * @return array An array containing all the values from array1 + * that are not present in any of the other arrays. + */ + public static function arrayDiffAssocRecursive( $array1 ) { + $arrays = func_get_args(); + array_shift( $arrays ); + $ret = array(); + + foreach ( $array1 as $key => $value ) { + if ( is_array( $value ) ) { + $args = array( $value ); + foreach ( $arrays as $array ) { + if ( isset( $array[$key] ) ) { + $args[] = $array[$key]; + } + } + $valueret = call_user_func_array( __METHOD__, $args ); + if ( count( $valueret ) ) { + $ret[$key] = $valueret; + } + } else { + foreach ( $arrays as $array ) { + if ( isset( $array[$key] ) && $array[$key] === $value ) { + continue 2; + } + } + $ret[$key] = $value; + } + } + + return $ret; + } +} diff --git a/includes/utils/ArrayUtils.php b/includes/utils/ArrayUtils.php deleted file mode 100644 index f93402108a..0000000000 --- a/includes/utils/ArrayUtils.php +++ /dev/null @@ -1,187 +0,0 @@ - $w ) { - $sum += $w; - # Do not return keys if they have 0 weight. - # Note that the "all 0 weight" case is handed above - if ( $w > 0 && $sum >= $rand ) { - break; - } - } - - return $i; - } - - /** - * Do a binary search, and return the index of the largest item that sorts - * less than or equal to the target value. - * - * @since 1.23 - * - * @param callable $valueCallback A function to call to get the value with - * a given array index. - * @param int $valueCount The number of items accessible via $valueCallback, - * indexed from 0 to $valueCount - 1 - * @param callable $comparisonCallback A callback to compare two values, returning - * -1, 0 or 1 in the style of strcmp(). - * @param string $target The target value to find. - * - * @return int|bool The item index of the lower bound, or false if the target value - * sorts before all items. - */ - public static function findLowerBound( $valueCallback, $valueCount, - $comparisonCallback, $target - ) { - if ( $valueCount === 0 ) { - return false; - } - - $min = 0; - $max = $valueCount; - do { - $mid = $min + ( ( $max - $min ) >> 1 ); - $item = call_user_func( $valueCallback, $mid ); - $comparison = call_user_func( $comparisonCallback, $target, $item ); - if ( $comparison > 0 ) { - $min = $mid; - } elseif ( $comparison == 0 ) { - $min = $mid; - break; - } else { - $max = $mid; - } - } while ( $min < $max - 1 ); - - if ( $min == 0 ) { - $item = call_user_func( $valueCallback, $min ); - $comparison = call_user_func( $comparisonCallback, $target, $item ); - if ( $comparison < 0 ) { - // Before the first item - return false; - } - } - return $min; - } - - /** - * Do array_diff_assoc() on multi-dimensional arrays. - * - * Note: empty arrays are removed. - * - * @since 1.23 - * - * @param array $array1 The array to compare from - * @param array $array2,... More arrays to compare against - * @return array An array containing all the values from array1 - * that are not present in any of the other arrays. - */ - public static function arrayDiffAssocRecursive( $array1 ) { - $arrays = func_get_args(); - array_shift( $arrays ); - $ret = array(); - - foreach ( $array1 as $key => $value ) { - if ( is_array( $value ) ) { - $args = array( $value ); - foreach ( $arrays as $array ) { - if ( isset( $array[$key] ) ) { - $args[] = $array[$key]; - } - } - $valueret = call_user_func_array( __METHOD__, $args ); - if ( count( $valueret ) ) { - $ret[$key] = $valueret; - } - } else { - foreach ( $arrays as $array ) { - if ( isset( $array[$key] ) && $array[$key] === $value ) { - continue 2; - } - } - $ret[$key] = $value; - } - } - - return $ret; - } -}