The IsSpace
function has been optimized for the more common case where a character is not whitespace. Previously, the function checked each whitespace character individually, which was not efficient for non-whitespace inputs as it required multiple comparisons.
This method is often used for parsing various inputs more flexibly, see usages.
This results in an additional ~2% performance improvement for base conversions (see related hexadecimal and base58 optimizations).
The updated IsSpace
function now first checks if the character is less than or equal to ’ ’ (the space character, which has the highest ASCII value among the whitespace characters). This single condition can quickly determine that most characters (i.e. letters, numbers) are not whitespace, thus short-circuiting the evaluation for the most common case.
Otherwise the function performs additional checks to see if it is either a space character or within the range of horizontal tab to carriage return (’\t’ to ‘\r’), which are the remaining whitespace characters in the ASCII table.
This change assumes that most calls to IsSpace are for non-whitespace characters, as can be inferred from the usage patterns where IsSpace
is often used in loops that parse strings until a non-whitespace character is encountered.
To make sure the changes keep the previous functionality, I’ve added an exhaustive unit test for it.