-
Forum: Object-Pascal / Delphi-Language
by himitsu,
11. Mär 2015
Dank Mobile, NextGen, AutoRefCount, ZeroBasedStrings, UnitNamespaces usw. wird es auch nicht leichter.
Man muß seine Codes weiterentwickeln, sich neue Wege überlegen und kann die schöne Abwärtskompatibilität genauso vergessen, wie die problemlose Wiederverwendbarkeit in allen Platformen.
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
2. Mär 2015
Daß da nix drin war, hatte ich gesehn, aber es ist halt praktischer, wenn man "nur TypeInfo und Pointer" übergeben muß, denn dann muß man sich nicht selber um das "böse" rumgepointere kümmern, um an den RefCount zu kommen.
(oder man ruft Copy einfach nur immer blind auf, egal ob der RefCount schon kleiner 2 ist)
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
2. Mär 2015
k.A.
In XE(1) hab ich es nicht gefunden ... dachte aber das gibt's schon viel länger.
Vielleicht unter einem anderem Name, aber auch da fand ich auf die Schnelle nix.
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
2. Mär 2015
Blub als Array-Property deklarieren und dort im Setter ein UniqueArray.
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
2. Mär 2015
Am schönsten wäre es ja, wenn man auf sowas wie deim GetArrayRef verzichten könnte.
Für Strings hat man das ja inzwischen auch eingebaut. StringRefCount
Copy(arr) ruft System.DynArrayCopy auf, aber du kannst stattdessen, und ohne RefCount vorher zu prüfen, System.DynArrayUnique ausrufen (prüft selbst intern das RefCount)
Aber am "optimalsten" wäre es halt, wenn Emba solche Methoden in...
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
2. Mär 2015
Das ist das eines der Probleme, die ich damit lösen wollte.
Für dynamische Arrays gibt es kein CopyOnWrite, wenn man schreibend auf ein Feld des dynamischen Arrays zugreift.
Bei Strings (die intern auch nur aufgemotzte dynamische Arrays sind) wird vor jedem Schreibzugriff auf ein Char (da ja array of char) sichergestellt, daß RefCount auch 1 ist.
(durch Aufruf von UniqueString)
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
2. Mär 2015
Meinst du die "Konvention"?
var
A, B: TMyRecord;
begin // Initialize/Create
...
A := B; // Copy (B -> A) + Finalize (altes A)
...
end; // Finalize/Destroy
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
2. Mär 2015
OK, ob es Initialize und Finalize heißt (siehe die Funktionen in der System.pas) oder Contrucor (ohne Parameter) und Destructor, ist ja erstmal egal. (aber stimmt, deinee Namen klingen besser)
Es werden für Records bereits diese Methoden ausgeführt (siehe System.pas), aber es gibt keine Weiterleitung zu "eigenen" Implementationen, was sich durch die zentralen Stellen hätte bestimmt ganz leicht...
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
2. Mär 2015
IstWar halt geheim. :lol:
Hier nochmal alles, was die Kompiler (bis XE7) kennen:
http://geheimniswelten.de/sonstiges/delphi-begriffe/klassenoperatoren/
(fehlt nur noch Initialize, Finalize und CopyRecord :cry:)
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
1. Mär 2015
Da ich grade wieder drüber gestopert bin und meinen alten Post in Google fand... (falls es auch Andere finden)
OnesComplement ist in Delphi nicht nutzbar (auch wenn man es dort implementieren kann).
Es ist eigentlich für den C++Builder gedacht und .NET kennt den Befehl ebenfalls. LogicalNot ist also das "logische not" (Boolean) und OnesComplement das "binäre not" (Integer).
Außerdem gibt...
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
18. Nov 2012
Ich wollte es nicht nutzen ... war nur neugierig, da es das ja scheinbar gibt, aber es noch keiner kenn :zwinker:
bei Bytes:
x := not x oder x := x xor not 0
bei Word:
x := not x oder x := x xor not 0
-
Forum: Object-Pascal / Delphi-Language
by himitsu,
18. Nov 2012
Ja ähhhhhhhh,
im Grunde weiß ich was diese Operation machen sollte, ich kann sie sogar implementieren.
type
TTest = record
x: Integer;
class operator OnesComplement(a: TTest): TTest;
end;
Aber praktisch hab ich keine Ahnung wie ich das verwenden soll. :oops: