Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$apptype console}
- uses Windows, SysUtils;
- const
- SampleString = 'foo bar baz blah de;blah de blah.';
- procedure P1;
- var
- cp: PChar;
- begin
- cp := PChar(SampleString);
- while not CharInSet(cp^, [#0, ';', '.']) do
- Inc(cp);
- end;
- procedure P2;
- var
- cp: PChar;
- begin
- cp := PChar(SampleString);
- while True do
- case cp^ of
- '.', #0, ';':
- Break;
- else
- Inc(cp);
- end;
- end;
- procedure P3;
- var
- cp: PChar;
- begin
- cp := PChar(SampleString);
- while not (AnsiChar(cp^) in [#0, ';', '.']) do
- Inc(cp);
- end;
- procedure Time(const Title: string; Proc: TProc);
- var
- i: Integer;
- start, finish, freq: Int64;
- begin
- QueryPerformanceCounter(start);
- for i := 1 to 1000000 do
- Proc;
- QueryPerformanceCounter(finish);
- QueryPerformanceFrequency(freq);
- Writeln(Format('%20s: %.3f seconds', [Title, (finish - start) / freq]));
- end;
- begin
- Time('CharInSet', P1);
- Time('case stmt', P2);
- Time('set test', P3);
- end.
- CharInSet: 0.261 seconds
- case stmt: 0.077 seconds
- set test: 0.060 seconds
- procedure P1;
- var
- cp: PChar;
- begin
- cp := PChar(SampleString);
- while True do
- if CharInSet(cp^, [#0, ';', '.']) then
- Break
- else
- Inc(cp);
- end;
- procedure P2;
- var
- cp: PChar;
- begin
- cp := PChar(SampleString);
- while True do
- case cp^ of
- '.', #0, ';':
- Break;
- else
- Inc(cp);
- end;
- end;
- procedure P3;
- var
- cp: PChar;
- begin
- cp := PChar(SampleString);
- while True do
- if AnsiChar(cp^) in [#0, ';', '.'] then
- Break
- else
- Inc(cp);
- end;
- CharInSet: 0.099 seconds
- case stmt: 0.043 seconds
- set test: 0.043 seconds
Add Comment
Please, Sign In to add comment