Moar typehints

This commit is contained in:
Dylan K. Taylor
2017-07-05 18:21:04 +01:00
parent 08b8debd78
commit 8fc1501e89
14 changed files with 111 additions and 88 deletions

View File

@ -28,20 +28,17 @@ class UUID{
private $parts = [0, 0, 0, 0];
private $version = null;
public function __construct($part1 = 0, $part2 = 0, $part3 = 0, $part4 = 0, $version = null){
$this->parts[0] = (int) $part1;
$this->parts[1] = (int) $part2;
$this->parts[2] = (int) $part3;
$this->parts[3] = (int) $part4;
public function __construct(int $part1 = 0, int $part2 = 0, int $part3 = 0, int $part4 = 0, int $version = null){
$this->parts = [$part1, $part2, $part3, $part4];
$this->version = $version === null ? ($this->parts[1] & 0xf000) >> 12 : (int) $version;
$this->version = $version === null ? ($this->parts[1] & 0xf000) >> 12 : $version;
}
public function getVersion(){
public function getVersion() : int{
return $this->version;
}
public function equals(UUID $uuid){
public function equals(UUID $uuid) : bool{
return $uuid->parts[0] === $this->parts[0] and $uuid->parts[1] === $this->parts[1] and $uuid->parts[2] === $this->parts[2] and $uuid->parts[3] === $this->parts[3];
}
@ -52,7 +49,7 @@ class UUID{
* @param int $version
* @return UUID
*/
public static function fromString($uuid, $version = null){
public static function fromString(string $uuid, int $version = null) : UUID{
return self::fromBinary(hex2bin(str_replace("-", "", trim($uuid))), $version);
}
@ -62,8 +59,10 @@ class UUID{
* @param string $uuid
* @param int $version
* @return UUID
*
* @throws \InvalidArgumentException
*/
public static function fromBinary($uuid, $version = null){
public static function fromBinary(string $uuid, int $version = null) : UUID{
if(strlen($uuid) !== 16){
throw new \InvalidArgumentException("Must have exactly 16 bytes");
}
@ -77,21 +76,21 @@ class UUID{
* @param string[] ...$data
* @return UUID
*/
public static function fromData(string ...$data){
public static function fromData(string ...$data) : UUID{
$hash = hash("md5", implode($data), true);
return self::fromBinary($hash, 3);
}
public static function fromRandom(){
public static function fromRandom() : UUID{
return self::fromData(Binary::writeInt(time()), Binary::writeShort(getmypid()), Binary::writeShort(getmyuid()), Binary::writeInt(mt_rand(-0x7fffffff, 0x7fffffff)), Binary::writeInt(mt_rand(-0x7fffffff, 0x7fffffff)));
}
public function toBinary(){
public function toBinary() : string{
return Binary::writeInt($this->parts[0]) . Binary::writeInt($this->parts[1]) . Binary::writeInt($this->parts[2]) . Binary::writeInt($this->parts[3]);
}
public function toString(){
public function toString() : string{
$hex = bin2hex($this->toBinary());
//xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx 8-4-4-4-12
@ -101,7 +100,7 @@ class UUID{
return substr($hex, 0, 8) . "-" . substr($hex, 8, 4) . "-" . substr($hex, 12, 4) . "-" . substr($hex, 16, 4) . "-" . substr($hex, 20, 12);
}
public function __toString(){
public function __toString() : string{
return $this->toString();
}

View File

@ -33,6 +33,11 @@ class VersionString{
private $minor;
private $development = false;
/**
* VersionString constructor.
*
* @param int|string $version
*/
public function __construct($version = \pocketmine\VERSION){
if(is_int($version)){
$this->minor = $version & 0x1F;
@ -40,9 +45,9 @@ class VersionString{
$this->generation = ($version >> 9) & 0x0F;
}else{
$version = preg_split("/([A-Za-z]*)[ _\\-]?([0-9]*)\\.([0-9]*)\\.{0,1}([0-9]*)(dev|)(-[\\0-9]{1,}|)/", $version, -1, PREG_SPLIT_DELIM_CAPTURE);
$this->generation = isset($version[2]) ? (int) $version[2] : 0; //0-15
$this->major = isset($version[3]) ? (int) $version[3] : 0; //0-15
$this->minor = isset($version[4]) ? (int) $version[4] : 0; //0-31
$this->generation = (int) ($version[2] ?? 0); //0-15
$this->major = (int) ($version[3] ?? 0); //0-15
$this->minor = (int) ($version[4] ?? 0); //0-31
$this->development = $version[5] === "dev";
if($version[6] !== ""){
$this->build = (int) (substr($version[6], 1));
@ -52,43 +57,49 @@ class VersionString{
}
}
public function getNumber(){
public function getNumber() : int{
return (int) (($this->generation << 9) + ($this->major << 5) + $this->minor);
}
public function getGeneration(){
public function getGeneration() : int{
return $this->generation;
}
public function getMajor(){
public function getMajor() : int{
return $this->major;
}
public function getMinor(){
public function getMinor() : int{
return $this->minor;
}
public function getRelease(){
public function getRelease() : string{
return $this->generation . "." . $this->major . ($this->minor > 0 ? "." . $this->minor : "");
}
public function getBuild(){
public function getBuild() : int{
return $this->build;
}
public function isDev(){
return $this->development === true;
public function isDev() : bool{
return $this->development;
}
public function get($build = false){
public function get(bool $build = false) : string{
return $this->getRelease() . ($this->development === true ? "dev" : "") . (($this->build > 0 and $build === true) ? "-" . $this->build : "");
}
public function __toString(){
public function __toString() : string{
return $this->get();
}
public function compare($target, $diff = false){
/**
* @param VersionString|int|string $target
* @param bool $diff
*
* @return int
*/
public function compare($target, bool $diff = false) : int{
if(($target instanceof VersionString) === false){
$target = new VersionString($target);
}