[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
No known key found for this signature in database
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;
abstract class NoteScope extends Bitmap
class NoteScope extends Bitmap
{
public const PUBLIC = 1;
public const SITE = 2;

View File

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

View File

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