AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Set of WideChar (TDynamicCharSet)

Set of WideChar (TDynamicCharSet)

Ein Thema von himitsu · begonnen am 9. Dez 2009 · letzter Beitrag vom 22. Apr 2010
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#1

Re: Set of WideChar (TDynamicCharSet)

  Alt 21. Feb 2010, 11:34
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)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#2

Re: Set of WideChar (TDynamicCharSet)

  Alt 25. Feb 2010, 19:27
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 )
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#3

Re: Set of WideChar (TDynamicCharSet)

  Alt 3. Mär 2010, 15:39
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.

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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#4

Re: Set of WideChar (TDynamicCharSet)

  Alt 5. Mär 2010, 16:05


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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#5

Re: Set of WideChar (TDynamicCharSet)

  Alt 12. Mär 2010, 12:00
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)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#6

Re: Set of WideChar (TDynamicCharSet)

  Alt 8. Apr 2010, 15:37
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ß.
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
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#7

Re: Set of WideChar (TDynamicCharSet)

  Alt 8. Apr 2010, 16:15
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.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#8

Re: Set of WideChar (TDynamicCharSet)

  Alt 8. Apr 2010, 16:21
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ß?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#9

Re: Set of WideChar (TDynamicCharSet)

  Alt 8. Apr 2010, 17:05
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.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#10

Re: Set of WideChar (TDynamicCharSet)

  Alt 22. Apr 2010, 12:13
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.
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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