Habe es jetzt mal so gebaut, in der Hoffnung, dass es bei großen Arrays schneller ist als mein obiger Code: [...]
Da werden die Parameter StartIndex und Count aber nicht ausgewertet
Jo, schon gemerkt gehabt -- muss wohl am dem fehlenden Schlaf liegen. Man sollte einfach nicht die komplette nach durchcoden
Trotzdem danke für den Hinweis!
(Von einem C-Compiler für Mikrocontroller bin ich es gewöhnt, dass der oft scheiße baut. Z.B. wenn man eine Variable hinzufügt. Fügt man noch eine hinzu, dann geht es wieder.)
Ist ja wie russisches Roulette
So schön Optimierungen des Compilers auch sein mögen, es sollte aber doch möglichst funktionieren... Dann kann es ruhig einen kleinen Tick langsamer sein.
Habe mir jetzt auch mal die _DynArrayCopyRange angeschaut und siehe da, himitsu hatte recht.
Aber in Verbindung mit der
RTTI vermute ich jetzt einfach mal, daß Die Generics da irgendwo Mist bauen (wie immer),
denn daraus werden ja die Informationen über den Aufbau der Daten geholt und damit auch über die Methode des Kopierens, bzw. die Speicherverwaltung.
An der Adresse, auf die zugegriffen wird, sollten eigentlich Typinformationen stehen, allerdings läuft da irgendwas ziemlich schief. Mal schauen, ob es nicht noch eine Rettung für den Spass gibt. Der Umstand der Kombination aus diesem
netten Problem und der Position der Methode innerhalb der Methoden-Deklarationen, ist aber echt genial
Ist deine Instanz von TApDynamicArray vielleicht gar nicht initialisiert?
Ich denke, dass ich nicht mehr als das hier benötige, da es sich um einen
record handelt, nicht um eine Klasse:
Delphi-Quellcode:
var
A : TApDynamicArray<Integer>;
begin
try
// Some basics
TTest.Print(A);
// -> []
SetLength(Tmp, 2);
A := Tmp;
TTest.Print(A);
// -> [0;0]
TTest.SetUnsortedData(A);
// -> Setzt die Länge auf 10 und füllt das Array
TTest.Sort(A);
// <- in der Method wird Clone aufgerufen -> Exception
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)