mirror of
https://github.com/google/bumble.git
synced 2026-04-18 00:45:32 +00:00
Hash and cache 128 bytes of UUID
This commit is contained in:
@@ -19,6 +19,7 @@ from __future__ import annotations
|
||||
|
||||
import dataclasses
|
||||
import enum
|
||||
import functools
|
||||
import struct
|
||||
from collections.abc import Iterable
|
||||
from typing import (
|
||||
@@ -273,13 +274,8 @@ class UUID:
|
||||
def parse_uuid_2(cls, uuid_as_bytes: bytes, offset: int) -> tuple[int, UUID]:
|
||||
return offset + 2, cls.from_bytes(uuid_as_bytes[offset : offset + 2])
|
||||
|
||||
def to_bytes(self, force_128: bool = False) -> bytes:
|
||||
'''
|
||||
Serialize UUID in little-endian byte-order
|
||||
'''
|
||||
if not force_128:
|
||||
return self.uuid_bytes
|
||||
|
||||
@functools.cached_property
|
||||
def uuid_128_bytes(self) -> bytes:
|
||||
match len(self.uuid_bytes):
|
||||
case 2:
|
||||
return self.BASE_UUID + self.uuid_bytes + bytes([0, 0])
|
||||
@@ -290,6 +286,15 @@ class UUID:
|
||||
case _:
|
||||
assert False, "unreachable"
|
||||
|
||||
def to_bytes(self, force_128: bool = False) -> bytes:
|
||||
'''
|
||||
Serialize UUID in little-endian byte-order
|
||||
'''
|
||||
if not force_128:
|
||||
return self.uuid_bytes
|
||||
|
||||
return self.uuid_128_bytes
|
||||
|
||||
def to_pdu_bytes(self) -> bytes:
|
||||
'''
|
||||
Convert to bytes for use in an ATT PDU.
|
||||
@@ -318,7 +323,7 @@ class UUID:
|
||||
|
||||
def __eq__(self, other: object) -> bool:
|
||||
if isinstance(other, UUID):
|
||||
return self.to_bytes(force_128=True) == other.to_bytes(force_128=True)
|
||||
return self.uuid_128_bytes == other.uuid_128_bytes
|
||||
|
||||
if isinstance(other, str):
|
||||
return UUID(other) == self
|
||||
@@ -326,7 +331,7 @@ class UUID:
|
||||
return False
|
||||
|
||||
def __hash__(self) -> int:
|
||||
return hash(self.uuid_bytes)
|
||||
return hash(self.uuid_128_bytes)
|
||||
|
||||
def __str__(self) -> str:
|
||||
result = self.to_hex_str(separator='-')
|
||||
|
||||
Reference in New Issue
Block a user