binary tree inlining
This commit is contained in:
parent
2f2ba19f2c
commit
19ccb3a5a0
@ -128,7 +128,7 @@ class ActiveCreation(
|
||||
else:
|
||||
resolved: BinaryTree[KeyMetadata[ActiveKeyType, MetaDataType]] = await tree.reference.resolve()
|
||||
assert isinstance(resolved, BinaryTree)
|
||||
key_metadata: KeyMetadata[ActiveKeyType, MetaDataType] = await resolved.key.resolve()
|
||||
key_metadata: KeyMetadata[ActiveKeyType, MetaDataType] = resolved.key
|
||||
assert isinstance(key_metadata, KeyMetadata)
|
||||
return BinarySplit(
|
||||
tree.create(resolved.treel), key_metadata.key, key_metadata.metadata, tree.create(resolved.treer)
|
||||
@ -149,7 +149,7 @@ class ActiveCreation(
|
||||
BinaryTree(
|
||||
treel.reference,
|
||||
treer.reference,
|
||||
HashPoint.of(KeyMetadata(key, await self.protocol.metadata(treel, treer, key, self)))
|
||||
KeyMetadata(key, await self.protocol.metadata(treel, treer, key, self))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
@ -10,7 +10,7 @@ TreeKeyType = TypeVar('TreeKeyType')
|
||||
|
||||
class BinaryTree(RecursiveMentionable, Generic[TreeKeyType]):
|
||||
def __factory__(self) -> RainbowFactory['BinaryTree[TreeKeyType]']:
|
||||
return self.factory(self.key.factory)
|
||||
return self.factory(self.key.__factory__())
|
||||
|
||||
@classmethod
|
||||
def factory(cls, factory: RainbowFactory[TreeKeyType]) -> RainbowFactory['BinaryTree[TreeKeyType]']:
|
||||
@ -21,17 +21,17 @@ class BinaryTree(RecursiveMentionable, Generic[TreeKeyType]):
|
||||
self,
|
||||
treel: NullableReference['BinaryTree[TreeKeyType]'],
|
||||
treer: NullableReference['BinaryTree[TreeKeyType]'],
|
||||
key: HashPoint[TreeKeyType]
|
||||
key: TreeKeyType
|
||||
):
|
||||
assert isinstance(treel, NullableReference)
|
||||
assert isinstance(treer, NullableReference)
|
||||
assert isinstance(key, HashPoint)
|
||||
assert isinstance(key, Mentionable)
|
||||
self.treel = treel
|
||||
self.treer = treer
|
||||
self.key = key
|
||||
|
||||
def points(self) -> Iterable[HashPoint]:
|
||||
return [*self.treel.points(), *self.treer.points(), self.key]
|
||||
return [*self.treel.points(), *self.treer.points(), *RecursiveMentionable.points_of(self.key)]
|
||||
|
||||
def __bytes__(self):
|
||||
return bytes(self.treel) + bytes(self.treer) + bytes(self.key)
|
||||
@ -40,7 +40,7 @@ class BinaryTree(RecursiveMentionable, Generic[TreeKeyType]):
|
||||
assert isinstance(tab, int)
|
||||
treel_str, key_str, treer_str = await gather(
|
||||
self.treel.str(tab),
|
||||
hash_point_format(self.key, tab),
|
||||
hash_point_format(HashPoint.of(self.key), tab),
|
||||
self.treer.str(tab),
|
||||
)
|
||||
assert isinstance(treel_str, str)
|
||||
@ -65,7 +65,7 @@ class BinaryTreeFactory(RainbowFactory[BinaryTree[TreeKeyType]], Generic[TreeKey
|
||||
source[HashPoint.HASH_LENGTH:HashPoint.HASH_LENGTH * 2],
|
||||
resolver
|
||||
),
|
||||
ResolverOrigin(self.factory, source[HashPoint.HASH_LENGTH * 2:], resolver).hash_point()
|
||||
self.factory.from_bytes(source[HashPoint.HASH_LENGTH * 2:], resolver),
|
||||
)
|
||||
|
||||
def loose(self) -> RainbowFactory[BinaryTree[TreeKeyType]]:
|
||||
|
@ -11,6 +11,13 @@ class RecursiveMentionable(Mentionable, abc.ABC):
|
||||
def points(self) -> Iterable[HashPoint]:
|
||||
raise NotImplementedError
|
||||
|
||||
@classmethod
|
||||
def points_of(cls, mentionable: Mentionable) -> Iterable[HashPoint]:
|
||||
if isinstance(mentionable, RecursiveMentionable):
|
||||
return mentionable.points()
|
||||
else:
|
||||
return []
|
||||
|
||||
async def str(self, tab: int) -> str:
|
||||
assert isinstance(tab, int)
|
||||
return f'(recursive {self.__class__.__name__})'
|
||||
|
Loading…
Reference in New Issue
Block a user