1<?php 2 3/** 4 * This file is part of the ramsey/uuid library 5 * 6 * For the full copyright and license information, please view the LICENSE 7 * file that was distributed with this source code. 8 * 9 * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com> 10 * @license http://opensource.org/licenses/MIT MIT 11 */ 12 13declare(strict_types=1); 14 15namespace Ramsey\Uuid; 16 17/** 18 * Provides binary math utilities 19 */ 20class BinaryUtils 21{ 22 /** 23 * Applies the RFC 4122 variant field to the 16-bit clock sequence 24 * 25 * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, § 4.1.1: Variant 26 * 27 * @param int $clockSeq The 16-bit clock sequence value before the RFC 4122 28 * variant is applied 29 * 30 * @return int The 16-bit clock sequence multiplexed with the UUID variant 31 * 32 * @psalm-pure 33 */ 34 public static function applyVariant(int $clockSeq): int 35 { 36 $clockSeq = $clockSeq & 0x3fff; 37 $clockSeq |= 0x8000; 38 39 return $clockSeq; 40 } 41 42 /** 43 * Applies the RFC 4122 version number to the 16-bit `time_hi_and_version` field 44 * 45 * @link http://tools.ietf.org/html/rfc4122#section-4.1.3 RFC 4122, § 4.1.3: Version 46 * 47 * @param int $timeHi The value of the 16-bit `time_hi_and_version` field 48 * before the RFC 4122 version is applied 49 * @param int $version The RFC 4122 version to apply to the `time_hi` field 50 * 51 * @return int The 16-bit time_hi field of the timestamp multiplexed with 52 * the UUID version number 53 * 54 * @psalm-pure 55 */ 56 public static function applyVersion(int $timeHi, int $version): int 57 { 58 $timeHi = $timeHi & 0x0fff; 59 $timeHi |= $version << 12; 60 61 return $timeHi; 62 } 63} 64