Это пока к нам не придет кто-то, кто знает ассемблер :)))
Fast code: by Reev and Sergio666 ;-)
function StrToInt(text: pchar): int; var curr, ext: int; negative : bool; begin // Extent ext:= 1; // def value result:= 0; // check negative value"? negative:=text[0] = #45{'-'}; // if negative -> del negative mark inc( text, ord( negative ) ); // get last enum char curr:=pred ( Lenght( text) ); // loop while curr >= 0 do begin // inc (convert value-text to ordinal type) inc( result, ( byte( text[curr]) - 48 ) * ext ); // ext ext:=ext * 10; // next char dec( curr); end; if negative then result:=-result; end;
А если строка будет '+10', загнётся же функция? А не должна...
С трудом могу себе представить программу, в которой постоянно приходится вызывать StrToInt, и вообще не могу себе представить программу, в которой эта скорость критична - за написание таких программ надо отрывать руки по самые помидоры...
pool2004
Парсинг например...
Например пропарсить obj или dae (коллада), когда данных много, файлики очень толстые и много времени тратится на парсинг...
Executor
В таких случаях парсинг надо организовывать только один раз - при перегонке в свой бинарный формат, а не компостировать себе мозги оптимизацией StrToInt. Есть куда более важные и интересные проблемы...
Executor
сделаю проверку на [0...9] =)
pool2004
Ну так это только первая функция+), сейчас взялся за Pos() посмотрим что выйдет.
1) В нормальном приложении написанном на Delphi, строки хранятся в Unicode (ну вот не могу я всё в AnsiString'ах хранить...). Следовательно для вызова этой функции придётся прибегнуть к дорогому конвертированию в PAnsiChar (которую ты переопределил в pchar)
2) Нет возможности задания Default значения в случае фигни в строке
3) Не разбирает ---, ++, +-+- и т.п. весёлую и никому не нужную белибердистику )
Написание таких функций очень даже полезно для развития мозга :)
4) Не конвертирует из Hex представления StrToInt('$101010FF')
Но для конкретных целей очень даже полезная вещь
5) Не воспринимает математические выражения.
X512
Стандартный разве воспринимает?
а проверять то на валидность данные кто будет?
Тема в архиве.