fix and add some functions

This commit is contained in:
2023-10-16 10:12:05 +08:00
parent 1d1de08bd7
commit 354b3cd180
3 changed files with 116 additions and 47 deletions

View File

@ -1,4 +1,4 @@
import math
import math, typing
class BBPException(Exception):
"""
@ -36,3 +36,20 @@ def clamp_int(v: int, min_val: int, max_val: int) -> int:
elif (v > max_val): return max_val
else: return v
_TLimitIterator = typing.TypeVar('_TLimitIterator')
def limit_iterator(it: typing.Iterator[_TLimitIterator], limit_count: int) -> typing.Iterator[_TLimitIterator]:
"""!
A generator wrapper for another generator to make sure the length of the given generator output entries
is not greater (<= less equal) than given number.
@param it[in] A iterator need to be limited. Use iter(ls) if your passing value is not a generator (eg. tuple, list)
@param limit_count[in] The count to limit. Must be a positive number. Can be 0.
@return A generator with limited length. Use tuple(ret) if you just want to convert it to a tuple.
"""
counter: int = 0
while counter < limit_count:
# if no elements in given iterator, StopIteration will raise.
# It is okey because it naturally stop the iteration of this generator.
yield next(it)
counter += 1