63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
from Base.Metadata import export, constmethod
|
|
from Base.BaseClass import BaseClass
|
|
from typing import Any, Final, overload, Dict
|
|
|
|
|
|
@export(
|
|
Constructor=True,
|
|
Reference=True,
|
|
)
|
|
class StringHasher(BaseClass):
|
|
"""
|
|
This is the StringHasher class
|
|
|
|
Author: Zheng, Lei (realthunder.dev@gmail.com)
|
|
Licence: LGPL
|
|
"""
|
|
|
|
@overload
|
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
...
|
|
|
|
def getID(self, arg: Any, base64: bool = False) -> Any:
|
|
"""
|
|
getID(txt|id, base64=False) -> StringID
|
|
|
|
If the input is text, return a StringID object that is unique within this hasher. This
|
|
StringID object is reference counted. The hasher may only save hash ID's that are used.
|
|
|
|
If the input is an integer, then the hasher will try to find the StringID object stored
|
|
with the same integer value.
|
|
|
|
base64: indicate if the input 'txt' is base64 encoded binary data
|
|
"""
|
|
...
|
|
|
|
@overload
|
|
def getID(self, txt: str, base64: bool = False) -> Any: ...
|
|
|
|
@overload
|
|
def getID(self, id: int, base64: bool = False) -> Any: ...
|
|
|
|
@constmethod
|
|
def isSame(self, other: "StringHasher") -> bool:
|
|
"""
|
|
Check if two hasher are the same
|
|
"""
|
|
...
|
|
|
|
Count: Final[int] = 0
|
|
"""Return count of used hashes"""
|
|
|
|
Size: Final[int] = 0
|
|
"""Return the size of the hashes"""
|
|
|
|
SaveAll: bool = False
|
|
"""Whether to save all string hashes regardless of its use count"""
|
|
|
|
Threshold: int = 0
|
|
"""Data length exceed this threshold will be hashed before storing"""
|
|
|
|
Table: Final[Dict[int, str]] = {}
|
|
"""Return the entire string table as Int->String dictionary"""
|