[UTIL] Update bitmap base class, making using easier

This commit is contained in:
Hugo Sales 2020-09-10 20:37:10 +00:00 committed by Hugo Sales
parent a248f23cef
commit ffcf909bda
Signed by: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0
3 changed files with 32 additions and 7 deletions

View File

@ -21,7 +21,7 @@ namespace App\Core;
use App\Util\Bitmap; use App\Util\Bitmap;
abstract class NoteScope extends Bitmap class NoteScope extends Bitmap
{ {
public const PUBLIC = 1; public const PUBLIC = 1;
public const SITE = 2; public const SITE = 2;

View File

@ -32,7 +32,7 @@ namespace App\Core;
use App\Util\Bitmap; use App\Util\Bitmap;
abstract class UserRoles extends Bitmap class UserRoles extends Bitmap
{ {
public const ADMIN = 1; public const ADMIN = 1;
public const MODERATOR = 2; public const MODERATOR = 2;

View File

@ -25,28 +25,53 @@ abstract class Bitmap
{ {
public static $consts = null; public static $consts = null;
public static function bitmapToStrings(int $r): array public static function _do(int $r, bool $instance)
{ {
$init = $r; $init = $r;
$class = get_called_class(); $class = get_called_class();
if ($instance) {
$obj = new $class;
} else {
$vals = []; $vals = [];
}
if (self::$consts == null) { if (self::$consts == null) {
self::$consts = (new \ReflectionClass($class))->getConstants(); self::$consts = (new \ReflectionClass($class))->getConstants();
unset(self::$consts['PREFIX']); unset(self::$consts['PREFIX']);
} }
foreach (self::$consts as $c => $v) { foreach (self::$consts as $c => $v) {
if (($r & $v) !== 0) { $b = ($r & $v) !== 0;
if ($instance) {
$obj->{$c} = $b;
}
if ($b) {
$r -= $v; $r -= $v;
if (!$instance) {
$vals[] = $class::PREFIX . $c; $vals[] = $class::PREFIX . $c;
} }
} }
}
if ($r != 0) { if ($r != 0) {
Log::error('Bitmap to array conversion failed'); Log::error('Bitmap to array conversion failed');
throw new ServerException("Bug in bitmap conversion for class {$class} from value {$init}"); throw new ServerException("Bug in bitmap conversion for class {$class} from value {$init}");
} }
if ($instance) {
return $obj;
} else {
return $vals; return $vals;
} }
}
public static function create(int $r): self
{
return self::_do($r, true);
}
public static function toArray(int $r): array
{
return self::_do($r, false);
}
} }