![]() |
Re: Set of WideChar (TDynamicCharSet)
Moin, ich wollte mal fragen, ob überhaupt jemand diese sogenannten Surrogate Pairs nutzt und ob es sich lohnen würde diese mit auszuwerten?
Die obere Grenze des Arrays läßt sich ja leicht erweitern, welches aber nichts am bisherigen Speicherverbauch ändern würde. (abesehn von invertierten Sets, welche dann natürlich doppelt so groß wären) Einige der Pascalcodes in ASM flottere ASM-Codes umzuwandeln werde ich vorerst noch lassen. (noch mindestens bis nach den Testläufen eines anderen Projektes, welches diese Sets nutzt) |
Re: Set of WideChar (TDynamicCharSet)
Nur was kleines Kosmetisches:
Hmmm, es scheint wohl keiner die Surrogate Pairs zu nutzen oder weiß erst garnicht was das ist. (dabei sind die voll genial ... ich wollte schon immer mal Dominosteine als Schriftzeichen haben :stupid: ) |
Re: Set of WideChar (TDynamicCharSet)
So, einiges der neuen Version (2.x) wurde ja inzwischen immer mal wieder in der alten Version (1.x) integriert, aber nun isses mal so weit.
Eigentlich isses ja 'ne Version 3.x, aber der ältere überarbeitet Entwurf war viel zu umständlich, so daß ich gleich nochmal neu anfing und demnach die Versionsnummer öffentlich erst garnicht weiterzählte. :angel2: Hab das komplette Speichermanagement umgestellt, so daß das alte Initialisierungsproblem (siehe 6#) garnicht mehr vorkommen kann und ich diesbezüglich weniger Aufwand hab, um dieses abzufangen. - das SET ist jetzt noch 'nen Haut speichersparender - und die "Konstanten" werden nicht mehr beim Programmstart erstellt, sondern erst wenn benötigt - das mit den Konstanten wurde in der alten Version 1.7 wieder zurückgebaut (gab da 'n kleines Problem und ich hab's halt nur noch in einer Version suchen und beheben wollen) Außerdem besteht der Record jetzt nur noch aus dem dynamischen Array, so daß dieses jetzt seitens Delphi wie ein Integer verwaltet werden kann, bzw. wie ein einfaches dynamisches Array, welches z.B. eine optimalere Übergabe als Parameter ermöglicht (paßt ja nun in ein Register rein). Zusätzlich sind auch schon Teile etwas optimiert (häßliches ASM eben) Nja, so einige manuelle Test verliefen erfolgreich. Aber 'nen "richtigen" Unittest muß ich noch fertigstellen, um da ganz sicher zu sein. (sind ja nur noch ~31 Prozeduren/Funktionen zu testen, von den fast 140 Öffentlichen) Im Post #1 befindet sich nun also eine Zip, mit der "alten" 1.7 und der "neuen" 2.0. Falls jemand Fehler entdeckt, so möge Er/Sie es bitte melden. :stupid: |
Re: Set of WideChar (TDynamicCharSet)
:wall: :wall: :wall: :wall:
Wißt ihr wie vieß ein winziger Fehler in einer Testroutine sein kann? Hatte zwar vorher unmassen an Möglichkeiten in der .Compare-Routine erfolgreich getestet, aber zwei winzige Sondefälle übersehn. In der Annahme, daß .Compare also funktioniert, ging ich nun also davon aus, daß etwas Anderes 'ne Macke hatt, welche ich einfach nicht fand. :? Also Compare war futsch, das Andere ging vermutlich (jedenfalls bis dahin, wo ich es versuchte zum Laufen zu bringen). Im Unitstest hab ich jetzt erstmal die beiden Wichigstens Vergleiche/Prüfungen (Equal und Compare) durch selbstprüfende Varianten ersetzt, welche weiterhin .Compare nutzen. Somit wird weiterhin Compare geprüft (auch dieser gemeine Sonderfall, aber es gibt bei den Püfungen keine Falschmeldungen mehr. :) Nja, ich hoofe mal die letzen Macken demnächst wegzubekommen, aber da ich die nächsten 2 Wochen etwas ausgelastet und kurz angebunden bin, werd' ich nicht viel Zeit hierfür haben. :? Meine aktuellen Codes sind dennoch oben mit angehangen und die 3 Blöcke mit dem {} davor, in der UnitTest.dpr, sind die mir bekannten Problemstellen. |
Re: Set of WideChar (TDynamicCharSet)
So, alle bekannten Fehler wurden endlich beseitigt. (Download siehe oben)
Codeoptimierungen werde ich jetzt aber nicht mehr vornehmen können. (sowas muß mindestens bis übernächste Woche warten, also bis ich wieder von der LBM zurück bin) |
Re: Set of WideChar (TDynamicCharSet)
Joar, was soll ich sagen?
Ich hatte inzwischen mal (hoffentlich) die letzen Fehler ausgemerzt, welche nach Reperatur der Prüffunktionen aufgetaucht sind. Nachfoldendes ist unwichtig ... steht nur hier , damit ich den Link nicht vergeß. :roll: Außerdem hab ich es auch mal im CodeCentral zur Diskusion gestellt ... mal sehn ob da noch jemand was dazu sagt. ![]() ![]() |
Re: Set of WideChar (TDynamicCharSet)
Zitat:
Unavailable Submission Sorry, you don't have access to this submission. Please see similar submissions for 3rdRail and Source Code, and other submissions by Frank Semmling. |
Re: Set of WideChar (TDynamicCharSet)
OK, die Frage ob du im EDN eingeloggt bist, hat sich dort über's Forum schon geklärt,
aber sonst wüßte ich nicht ob und wo ich da was "freigeben" oder umstellen muß? :gruebel: |
Re: Set of WideChar (TDynamicCharSet)
Wenn du mal auf eine meiner Submissions gehst
![]() Zitat:
Bei den Eigenschaften der Submission habe ich bei Copyright: "No significant restrictions" und bei Terms "Embarcadero use at your own risk disclaimer" angegeben. |
Re: Set of WideChar (TDynamicCharSet)
Ups, da hatte ich doch glatt vergessen die letzte Version hochzuladen,
in welcher dieser saublöde Compilerfehler (defekte Referenzzählung ![]() behoben/umgangen wurde. Und nun noch ein kleiner "Gag": Das kleinste (vom Code her) und schnellste WideCharSet der Welt. :lol:
Delphi-Quellcode:
Es kann nicht viel, kennt kein Ansi, aber es ist dafür klein und komplett fehlerunanfällig. :angel:
Type TWideCharRec = Record
Lo: AnsiChar; Hi: Byte; End; TTinyWideCharSet = Record Sets: Array[Byte] of TSysCharSet; Procedure Include(C: WideChar); Inline; Procedure Exclude(C: WideChar); Inline; Function Test (C: WideChar): Boolean; Inline; Procedure Clear; Inline; End; Procedure TTinyWideCharSet.Include(C: WideChar); Begin System.Include(Sets[TWideCharRec(C).Hi], TWideCharRec(C).Lo); End; Procedure TTinyWideCharSet.Exclude(C: WideChar); Begin System.Exclude(Sets[TWideCharRec(C).Hi], TWideCharRec(C).Lo); End; Function TTinyWideCharSet.Test(C: WideChar): Boolean; Begin Result := TWideCharRec(C).Lo in Sets[TWideCharRec(C).Hi]; End; Procedure TTinyWideCharSet.Clear; Var i: Byte; Begin For i := 0 to 255 do Sets[i] := []; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz