-
Content Count
2063 -
Joined
-
Last visited
-
Days Won
27
Everything posted by Attila Kovacs
-
Patch 2 for RAD Studio 10.4 now available
Attila Kovacs replied to Marco Cantu's topic in General Help
The Oracle: What’s really going to bake your noodle later on is, would you still have broken it if I hadn’t said anything. -
I'm wondering if you are also getting a big fat AV for ctrl-b on the welcome page if parnassus is installed. 10.1U2
-
Help with string extraction function
Attila Kovacs replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
@Mike Torrettinni And the same code can perform differently on different CPU's. Because the "integer iterator" does nothing else just calculates the pointer + i over and over. So basically it's a shortcut. -
Help with string extraction function
Attila Kovacs replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
@Stefan Glienke thx, updated. Strange, with 10.1U2 it's definitely much faster if not storing it. O+ W- asm: ec4.txt -
Help with string extraction function
Attila Kovacs replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Slightly modified Stefan's beautiful routine. If I did not screw it up, it's faster because of comparing against the stack (parameters aChar1, aChar2), (I can't explain that), and omitting "sr" leaves more register for the compiler, which was a speed boost again. Also, the initial "while" became a "repeat until", and instead of "P^ = #0" there is a " P = ep". function ExtractContent4(const S: string; const aChar1, aChar2: Char): string; var P, ep, r: PChar; len: integer; begin len := S.Length; if len = 0 then exit(S); SetLength(Result, len); r := Pointer(Result); P := Pointer(S); ep := P + len; repeat r^ := P^; if P^ = aChar1 then begin repeat inc(P); until (P^ = aChar2) or (P = ep); end else inc(r); inc(P); until P > ep; SetLength(Result, r - Pointer(Result)); end; -
Help with string extraction function
Attila Kovacs replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
no-no, the compiler runs out of registers if do so, always testing separately Nice routine. I don't know why but if you use parameters instead if consts it performs even better. (Despite comparing against the stack) ExtractContent(const S: string; const aChar1, aChar2: Char); this boost it even further: var zero: Char; zero := #0; until (P^ = aChar2) or (P^ = zero); or even better: until (P^ = aChar2) or (P = ep); -
Help with string extraction function
Attila Kovacs replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Looking into the Move() implementation, wth is happened to rep movs*? Is it too slow nowadays? -
Help with string extraction function
Attila Kovacs replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
You are right, even around the Move() was some string magic. With passing PChar is even faster. As for the result type, I'll let it for Mike to tune it. -
Help with string extraction function
Attila Kovacs replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
@Mike Torrettinni Slightly modified, wasn't round everything. -
Help with string extraction function
Attila Kovacs replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Player 3 entered the game (edited) function RemoveTextBetweenChars(const aString: string; const aChar1, aChar2: Char): string; label exit; var c: integer; P, start, res: PChar; begin if aString <> '' then begin SetLength(Result, aString.Length); res := Pointer(Result); P := Pointer(aString); c := 0; while True do begin start := P; while P^ <> aChar1 do begin inc(P); if P^ = #0 then begin Move(start^, res[c], (P - start) * SizeOf(Char)); inc(c, P - start); goto exit; end; end; Move(start^, res[c], (P - start) * SizeOf(Char)); inc(c, P - start); while P^ <> aChar2 do begin inc(P); if P^ = #0 then goto exit; end; inc(P); if P^ = #0 then goto exit; end; exit: SetLength(Result, c); end; end; -
they are busy with bumping Delphi 7 licences
-
Move( PFirmWare(FXmodemFile.Items[Line])^.buffer, buffer[0], Length(PFirmWare(FXmodemFile.Items[Line])^.buffer) );
-
No, this is the good thing 😉 I've a batch file for building the release versions.
-
@limelect thx for confirming. It was acquired by emba, It's in getit, so there will be no new releases for older IDE's.
-
How to increase the distance between TCheckBox glyph and caption text?
Attila Kovacs replied to PeterPanettone's topic in VCL
All good. It was in my comment that this is only for static text, and if you would argue then you should have asked what if somebody want 2.5 x space distance 😉 -
How to increase the distance between TCheckBox glyph and caption text?
Attila Kovacs replied to PeterPanettone's topic in VCL
btw. how did you separate the words back in the high school? -
How to increase the distance between TCheckBox glyph and caption text?
Attila Kovacs replied to PeterPanettone's topic in VCL
of course does it work, just set the font size to 2. what is your problem? -
How to increase the distance between TCheckBox glyph and caption text?
Attila Kovacs replied to PeterPanettone's topic in VCL
Only if the text is dynamic or multilang. So in 99.99% the cases could work. Caption = ' Unga'#13#10' Bunga' WordWrap = True -
I installed from the sources, I never install binaries. I don't even have a Delphi like those precompiled versions. I don't even get it why are they different, nevermind.
-
It's indeed promising, but there are several issues. At least with the github version, I'm not sure if it's the latest version though.
-
@Lars Fosdal Hmm, okay, then something strange happening here. As I wrote, ctrl-b (bookmark or what) pressed on the welcome page.
-
Translations of the exception notification dialog text
Attila Kovacs replied to dummzeuch's topic in Delphi IDE and APIs
google: site:.jp delphi debug project1.exe or something like that. however no luck with site:.fr. they must be awesome coder 😉 -
Translations of the exception notification dialog text
Attila Kovacs replied to dummzeuch's topic in Delphi IDE and APIs
This won't help you, am I right? 😉 Maybe this: -
total pointless debate, doesn't matter a thing which one you call, and the implementation won't change in the next 40 years, nor the bug will be fixed.
-
Ok, no "for" loop, no "xor" etc.. which hides implementation details on Char, and reverted back to text=LineBreak delivers 1 empty string for compatibility reasons (original TString / .Split(), etc...) procedure TStringList.SetTextStr(const Value: string); var P, P2, fc, Start, LineBreakEnd: PChar; s: string; LineBreakLen: integer; LLineBreak: PChar; begin BeginUpdate; try Clear; P := Pointer(Value); if P <> nil then begin LLineBreak := PChar(LineBreak); LineBreakLen := Length(LLineBreak); if LineBreakLen > 0 then begin LineBreakEnd := LLineBreak + LineBreakLen; fc := LLineBreak; Start := P; while P^ <> #0 do begin while (P^ <> fc^) and (P^ <> #0) do Inc(P); if P^ <> #0 then begin P2 := P + 1; Inc(fc); while fc^ <> #0 do begin if P2^ <> fc^ then Break; Inc(P2); Inc(fc) end; if fc = LineBreakEnd then begin SetString(s, Start, P - Start); Add(s); P := P2; Start := P; end else Inc(P); fc := LLineBreak; end; end; if P > Start then begin SetString(s, Start, P - Start); Add(s); end; end else Add(Value); end; finally EndUpdate; end; end;