Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Set of WideChar (TDynamicCharSet) (https://www.delphipraxis.net/144528-set-widechar-tdynamiccharset.html)

himitsu 21. Feb 2010 11:34

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)

himitsu 25. Feb 2010 19:27

Re: Set of WideChar (TDynamicCharSet)
 
Nur was kleines Kosmetisches:
  • die Konstanten sind in eine abstrakte Klasse gewandert
    hatte keine Lust für jede einzelne eine eigene Initialisierungsprozedur zu schreiben und da machten sich Property ganz gut
  • die Konstanten werden erst bei der ersten Verwendung initialisiert
    es belegen also nicht mehr immer alle Konstanten den Speicher, sondern nur noch die Verwendeten

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: )

himitsu 3. Mär 2010 15:39

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:

himitsu 5. Mär 2010 16:05

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.

himitsu 12. Mär 2010 12:00

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)

himitsu 8. Apr 2010 15:37

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.
https://forums.codegear.com/thread.jspa?threadID=35565
http://cc.embarcadero.com/item/27670

Uwe Raabe 8. Apr 2010 16:15

Re: Set of WideChar (TDynamicCharSet)
 
Zitat:

Zitat von himitsu
http://cc.embarcadero.com/item/27670

Das ist alles, was ich da zu sehen bekomme:
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.

himitsu 8. Apr 2010 16:21

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:

Uwe Raabe 8. Apr 2010 17:05

Re: Set of WideChar (TDynamicCharSet)
 
Wenn du mal auf eine meiner Submissions gehst http://cc.embarcadero.com/Item/26127, dann steht unter dem Download-Button:

Zitat:

To download this, you must have registered:
Your existing free membership
Was steht denn bei dir?

Bei den Eigenschaften der Submission habe ich bei Copyright: "No significant restrictions" und bei Terms "Embarcadero use at your own risk disclaimer" angegeben.

himitsu 22. Apr 2010 12:13

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
http://www.delphipraxis.net/internal...t.php?t=176345 )
behoben/umgangen wurde.

Und nun noch ein kleiner "Gag":
Das kleinste (vom Code her) und schnellste WideCharSet der Welt. :lol:
Delphi-Quellcode:
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;
Es kann nicht viel, kennt kein Ansi, aber es ist dafür klein und komplett fehlerunanfällig. :angel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz