Перебрал всё полностью... вообще всё.
По сути теперь основные три (шесть, для юникода отдельные, идентичные три) функции:
- Код: Выделить всё
function geCharToInt(const aStr: array of Char; out Value: maxIntVal; Size: maxIntVal = maxSize): Boolean;
function geCharToUInt(const aStr: array of Char; out Value: maxUIntVal; Size: maxIntVal = maxSize): Boolean;
function geHOBCharToUInt(const aStr: array of Char; out Value: maxUIntVal; Size: maxIntVal = maxSize): Boolean;
Для юникода для этих функций вместо
Char стоит
WChar.
Использование юникода можно отключить.
Можно включить только использование юникода. Смотрим файл настроек.
Функции
WChar используется только юникодом. Все остальные типы строк используются через функции
Char.
Функции:
- Код: Выделить всё
function geStrToInt(const Str: useString; out Value: maxIntVal; Size: maxIntVal = maxSize): Boolean; inline;
function geStrToUInt(const Str: useString; out Value: maxUIntVal; Size: maxIntVal = maxSize): Boolean; inline;
function geHOBStrToUInt(const Str: useString; out Value: maxUIntVal; Size: maxIntVal = maxSize): Boolean; inline;
переработаны и работают не намного быстрее пользовательских функций.
Возникает вопрос, нужны ли они? Они удобны только для прямого использования, если знаешь с какими данными работаешь и в таком случае есть возможность предотвратить, всегда, ведущие нули. Они напрямую вызывают основные функции.
На данное время оставляю.
Нужны тесты, не осталось ли где ошибок.
Я хоть и проверил, как можно больше, но не гарантирую 100% безошибочной работы.
Ну и напоследок, из кода выпилена основная часть
goto. )))
Добавлено спустя 1 минуту 2 секунды:блин... я почти уподобился генерикам... единственный плюс, что всё переключаемо.
Добавлено спустя 1 час 2 минуты 3 секунды:Обратите внимание!!! Если вы работаете с UTF8String и вы не включите дефайн
USE_UTF8STRING, вы можете не получить ни какого ускорения!!!
Максимальное ускорение работы кода, только в том случае если используемые типы совпадают.