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