diff options
author | Andrew Dolgov <[email protected]> | 2022-11-23 21:14:33 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2022-11-23 21:14:33 +0300 |
commit | 0c8af4992cb0f7589dcafaad65ada12753c64594 (patch) | |
tree | 18e83d068c3e7dd2499331de977782b382279396 /vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php |
initial
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php b/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php new file mode 100644 index 0000000..80ccc47 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/EndpointDiscovery/EndpointList.php @@ -0,0 +1,85 @@ +<?php +namespace Aws\EndpointDiscovery; + +class EndpointList +{ + private $active; + private $expired = []; + + public function __construct(array $endpoints) + { + $this->active = $endpoints; + reset($this->active); + } + + /** + * Gets an active (unexpired) endpoint. Returns null if none found. + * + * @return null|string + */ + public function getActive() + { + if (count($this->active) < 1) { + return null; + } + while (time() > current($this->active)) { + $key = key($this->active); + $this->expired[$key] = current($this->active); + $this->increment($this->active); + unset($this->active[$key]); + if (count($this->active) < 1) { + return null; + } + } + $active = key($this->active); + $this->increment($this->active); + return $active; + } + + /** + * Gets an active endpoint if possible, then an expired endpoint if possible. + * Returns null if no endpoints found. + * + * @return null|string + */ + public function getEndpoint() + { + if (!empty($active = $this->getActive())) { + return $active; + } + return $this->getExpired(); + } + + /** + * Removes an endpoint from both lists. + * + * @param string $key + */ + public function remove($key) + { + unset($this->active[$key]); + unset($this->expired[$key]); + } + + /** + * Get an expired endpoint. Returns null if none found. + * + * @return null|string + */ + private function getExpired() + { + if (count($this->expired) < 1) { + return null; + } + $expired = key($this->expired); + $this->increment($this->expired); + return $expired; + } + + private function increment(&$array) + { + if (next($array) === false) { + reset($array); + } + } +} |