From 895df8c22b637688e8809911c0ddae049483a47a Mon Sep 17 00:00:00 2001 From: Daku Date: Wed, 11 May 2016 23:27:42 +0100 Subject: [PATCH] load flexihash via composer --- composer.json | 2 + core/_bootstrap.inc.php | 1 + core/imageboard.pack.php | 5 +- lib/flexihash.php | 269 --------------------------------------- 4 files changed, 4 insertions(+), 273 deletions(-) delete mode 100644 lib/flexihash.php diff --git a/composer.json b/composer.json index aaca157d..71c996e1 100644 --- a/composer.json +++ b/composer.json @@ -5,6 +5,8 @@ "require" : { "php" : ">=5.4.8", + "flexihash/flexihash": "^2.0.0", + "bower-asset/jquery": "1.12.3" }, diff --git a/core/_bootstrap.inc.php b/core/_bootstrap.inc.php index 77fcbc1d..df92da94 100644 --- a/core/_bootstrap.inc.php +++ b/core/_bootstrap.inc.php @@ -9,6 +9,7 @@ global $config, $database, $user, $page; require_once "core/sys_config.inc.php"; require_once "core/util.inc.php"; require_once "lib/context.php"; +require_once "vendor/autoload.php"; // set up and purify the environment _version_check(); diff --git a/core/imageboard.pack.php b/core/imageboard.pack.php index c4111c89..9a426a03 100644 --- a/core/imageboard.pack.php +++ b/core/imageboard.pack.php @@ -23,9 +23,6 @@ * Classes * \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -require_once "lib/flexihash.php"; - /** * Class Image * @@ -724,7 +721,7 @@ class Image { if($opts != $fh_last_opts) { $fh_last_opts = $opts; - $flexihash = new Flexihash(); + $flexihash = new Flexihash\Flexihash(); foreach(explode(",", $opts) as $opt) { $parts = explode("=", $opt); $parts_count = count($parts); diff --git a/lib/flexihash.php b/lib/flexihash.php deleted file mode 100644 index f9d25db5..00000000 --- a/lib/flexihash.php +++ /dev/null @@ -1,269 +0,0 @@ - target, ... } - */ - private $_positionToTarget = array(); - - /** - * Internal map of targets to lists of positions that target is hashed to. - * @var array { target => [ position, position, ... ], ... } - */ - private $_targetToPositions = array(); - - /** - * Whether the internal map of positions to targets is already sorted. - * @var boolean - */ - private $_positionToTargetSorted = false; - - /** - * Constructor - * @param object $hasher Flexihash_Hasher - * @param int $replicas Amount of positions to hash each target to. - */ - public function __construct(Flexihash_Hasher $hasher = null, $replicas = null) - { - $this->_hasher = $hasher ? $hasher : new Flexihash_Crc32Hasher(); - if (!empty($replicas)) $this->_replicas = $replicas; - } - - /** - * Add a target. - * @param string $target - * @param float $weight - * @chainable - */ - public function addTarget($target, $weight=1) - { - if (isset($this->_targetToPositions[$target])) - { - throw new Flexihash_Exception("Target '$target' already exists."); - } - - $this->_targetToPositions[$target] = array(); - - // hash the target into multiple positions - for ($i = 0; $i < round($this->_replicas*$weight); $i++) - { - $position = $this->_hasher->hash($target . $i); - $this->_positionToTarget[$position] = $target; // lookup - $this->_targetToPositions[$target] []= $position; // target removal - } - - $this->_positionToTargetSorted = false; - $this->_targetCount++; - - return $this; - } - - /** - * Add a list of targets. - * @param array $targets - * @param float $weight - * @chainable - */ - public function addTargets($targets, $weight=1) - { - foreach ($targets as $target) - { - $this->addTarget($target,$weight); - } - - return $this; - } - - /** - * Remove a target. - * @param string $target - * @chainable - */ - public function removeTarget($target) - { - if (!isset($this->_targetToPositions[$target])) - { - throw new Flexihash_Exception("Target '$target' does not exist."); - } - - foreach ($this->_targetToPositions[$target] as $position) - { - unset($this->_positionToTarget[$position]); - } - - unset($this->_targetToPositions[$target]); - - $this->_targetCount--; - - return $this; - } - - /** - * A list of all potential targets - * @return array - */ - public function getAllTargets() - { - return array_keys($this->_targetToPositions); - } - - /** - * Looks up the target for the given resource. - * @param string $resource - * @return string - */ - public function lookup($resource) - { - $targets = $this->lookupList($resource, 1); - if (empty($targets)) throw new Flexihash_Exception('No targets exist'); - return $targets[0]; - } - - /** - * Get a list of targets for the resource, in order of precedence. - * Up to $requestedCount targets are returned, less if there are fewer in total. - * - * @param string $resource - * @param int $requestedCount The length of the list to return - * @return array List of targets - */ - public function lookupList($resource, $requestedCount) - { - if (!$requestedCount) - throw new Flexihash_Exception('Invalid count requested'); - - // handle no targets - if (empty($this->_positionToTarget)) - return array(); - - // optimize single target - if ($this->_targetCount == 1) - return array_unique(array_values($this->_positionToTarget)); - - // hash resource to a position - $resourcePosition = $this->_hasher->hash($resource); - - $results = array(); - $collect = false; - - $this->_sortPositionTargets(); - - // search values above the resourcePosition - foreach ($this->_positionToTarget as $key => $value) - { - // start collecting targets after passing resource position - if (!$collect && $key > $resourcePosition) - { - $collect = true; - } - - // only collect the first instance of any target - if ($collect && !in_array($value, $results)) - { - $results []= $value; - } - - // return when enough results, or list exhausted - if (count($results) == $requestedCount || count($results) == $this->_targetCount) - { - return $results; - } - } - - // loop to start - search values below the resourcePosition - foreach ($this->_positionToTarget as $key => $value) - { - if (!in_array($value, $results)) - { - $results []= $value; - } - - // return when enough results, or list exhausted - if (count($results) == $requestedCount || count($results) == $this->_targetCount) - { - return $results; - } - } - - // return results after iterating through both "parts" - return $results; - } - - public function __toString() - { - return sprintf( - '%s{targets:[%s]}', - get_class($this), - implode(',', $this->getAllTargets()) - ); - } - - // ---------------------------------------- - // private methods - - /** - * Sorts the internal mapping (positions to targets) by position - */ - private function _sortPositionTargets() - { - // sort by key (position) if not already - if (!$this->_positionToTargetSorted) - { - ksort($this->_positionToTarget, SORT_REGULAR); - $this->_positionToTargetSorted = true; - } - } - -} -