Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
Gray
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
2 / 2
3
100.00% covered (success)
100.00%
1 / 1
 encode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 decode
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2/**
3 * Jingga
4 *
5 * PHP Version 8.1
6 *
7 * @package   phpOMS\Utils\Encoding
8 * @copyright Dennis Eichhorn
9 * @license   OMS License 2.0
10 * @version   1.0.0
11 * @link      https://jingga.app
12 */
13declare(strict_types=1);
14
15namespace phpOMS\Utils\Encoding;
16
17/**
18 * Gray encoding class
19 *
20 * @package phpOMS\Utils\Encoding
21 * @license OMS License 2.0
22 * @link    https://jingga.app
23 * @since   1.0.0
24 */
25final class Gray
26{
27    /**
28     * Encode source text
29     *
30     * @param int $source Source to encode
31     *
32     * @return int
33     *
34     * @since 1.0.0
35     */
36    public static function encode(int $source) : int
37    {
38        return $source ^ ($source >> 1);
39    }
40
41    /**
42     * Dedecodes text
43     *
44     * @param int $gray encoded value to dedecode
45     *
46     * @return int
47     *
48     * @since 1.0.0
49     */
50    public static function decode(int $gray) : int
51    {
52        $source = $gray;
53
54        while ($gray >>= 1) {
55            $source ^= $gray;
56        }
57
58        return $source;
59    }
60}