1 | <?php |
||
16 | final class PackOptions |
||
17 | { |
||
18 | public const FORCE_STR = 0b00000001; |
||
19 | public const FORCE_BIN = 0b00000010; |
||
20 | public const DETECT_STR_BIN = 0b00000100; |
||
21 | public const FORCE_ARR = 0b00001000; |
||
22 | public const FORCE_MAP = 0b00010000; |
||
23 | public const DETECT_ARR_MAP = 0b00100000; |
||
24 | public const FORCE_FLOAT32 = 0b01000000; |
||
25 | public const FORCE_FLOAT64 = 0b10000000; |
||
26 | |||
27 | private $strBinMode; |
||
28 | private $arrMapMode; |
||
29 | private $floatMode; |
||
30 | |||
31 | 212 | private function __construct() |
|
34 | |||
35 | 181 | public static function fromDefaults() : self |
|
36 | { |
||
37 | 181 | $self = new self(); |
|
38 | 181 | $self->strBinMode = self::DETECT_STR_BIN; |
|
39 | 181 | $self->arrMapMode = self::DETECT_ARR_MAP; |
|
40 | 181 | $self->floatMode = self::FORCE_FLOAT64; |
|
41 | |||
42 | 181 | return $self; |
|
43 | } |
||
44 | |||
45 | 50 | public static function fromBitmask(int $bitmask) : self |
|
46 | { |
||
47 | 50 | $self = new self(); |
|
48 | |||
49 | 50 | $self->strBinMode = self::getSingleOption('str/bin', $bitmask, |
|
50 | 50 | self::FORCE_STR | |
|
51 | 50 | self::FORCE_BIN | |
|
52 | 50 | self::DETECT_STR_BIN |
|
53 | 28 | ) ?: self::DETECT_STR_BIN; |
|
54 | |||
55 | 46 | $self->arrMapMode = self::getSingleOption('arr/map', $bitmask, |
|
56 | 46 | self::FORCE_ARR | |
|
57 | 46 | self::FORCE_MAP | |
|
58 | 46 | self::DETECT_ARR_MAP |
|
59 | 26 | ) ?: self::DETECT_ARR_MAP; |
|
60 | |||
61 | 43 | $self->floatMode = self::getSingleOption('float', $bitmask, |
|
62 | 43 | self::FORCE_FLOAT32 | |
|
63 | 43 | self::FORCE_FLOAT64 |
|
64 | 38 | ) ?: self::FORCE_FLOAT64; |
|
65 | |||
66 | 42 | return $self; |
|
67 | } |
||
68 | |||
69 | 186 | public function isDetectStrBinMode() : bool |
|
73 | |||
74 | 186 | public function isForceStrMode() : bool |
|
78 | |||
79 | 4 | public function isForceBinMode() : bool |
|
80 | { |
||
83 | |||
84 | 186 | public function isDetectArrMapMode() : bool |
|
88 | |||
89 | 186 | public function isForceArrMode() : bool |
|
93 | |||
94 | 4 | public function isForceMapMode() : bool |
|
98 | |||
99 | 185 | public function isForceFloat32Mode() : bool |
|
103 | |||
104 | 50 | private static function getSingleOption(string $name, int $bitmask, int $validBitmask) : int |
|
129 | } |
||
130 |