cruxinator / php-bitmask Goto Github PK
View Code? Open in Web Editor NEWPHP Bitmask implementation
License: MIT License
PHP Bitmask implementation
License: MIT License
Please forgive me if this is stupid.
I had expected to be able to instantiate a BitMask from a compiled integer, ie so that new Bitmask(3)
would later allow me to check if both the Enum with the value of 1 and the one with the value of 2 would be set. This doesn't appear to work.
namespace app\Bitmasks;
use Cruxinator\BitMask\BitMask;
class TestFlags extends BitMask
{
const GROUPA = 1 << 0;
const GROUPB = 1 << 1;
const GROUPC = 1 << 2;
}`
Now I was expecting to be able to do this:
$x = new TestFlags(3);
$x->isGROUPA(); // expected true
$x->isGROUPB(); // expected true
$x->isGROUPC(); // expected false
Instead of my expectation I receive Uncaught UnexpectedValueException: Value '3' is not part of the enum app\Bitmasks\TestFlags
Am I missing something obvious?
It can be done in the code, but @c-harris has asked me to add the issue so he doesn't lose track of it.
I was wondering why the getKey
function didn't properly return flags when I realized it apparently expects every single value to be represented in the range of bits in the mask (in addition to a "zero" dummy value at the end of it all).
For instance, a bitmask that defines values of 1, 4, 128, you won't ever get a proper array for anything but the 1 value.
I propose that since each value is supposed to represent a single-bit mask in the bitmask anyways, the function could be thus:
public function getKey()
{
$value = $this->value;
$f = array_filter(static::toArray(), function ($key) use (&$value) {
return $value & $key;
});
return array_keys($f);
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.