Also, wie Versprochen hier mal die ersten Teile meines kleinen Projekes.
es wird mal 'ne Art
nonVCL-Framework und benötigt keine Fremdkomponenten/-Units und es werden auch nur die nötigsten Delphi-Units benötigt (per Standard nur System, SysInit und SysConst)
* das ganze Projekt ist auf Minimalismus ausgelegt,
also es wird niemals so groß wie z.B. die JEDIs, aber es soll das "Nötigste" enthalten
außerdem wird auf minimalsten Speicherverbrauch/Overhead geachtet
* es ist aktuell in einen Debugmodus versetzt und auch die Inlinefunktionen sind deaktivert
* alte/neue Demo-/Testprojekte liegen im Unterverzeichnis "Demo"
und in der Project.dpr befinden sich aktuelle Test-/Democodes zur TBigInt
* speziell in der FMath.pas sind noch unfertige Funktionen drin ... einfach mal nach "///" ausschau halten, außerdem wird bei Verwendung der entsprechende Funktionen eine
Exception ausgelößt.
!!! Achtung: Vorraussetzung ist mindestens:
- BDS 2006, Delphi 2006, Turbo Delphi (incl. Updates)
- Windows 2000 Professional oder Neuer
"wichtige" aktuell enthaltene Elemente:
- FVersionsCheck.inc
Delphi-Versiontests
Optionen (alternativ über Delphiprojektoptionen)
> Userdefinitionen im Abschnitt "Private" (ab Zeile 705) und Beschreibungen siehe nachfolgenden Abschnitt
- FType.pas
(Basis)Typendefinitionen
- FBinary.pas
ByteSwap, BitSwap, RoL, RoR, OpenBit(MSB), CloseBit(LSB), CountBits, OneBit(MSB+LSB)
Swap(Speicher tauschen), FindData(binärdaten suchen)
- FMath.pas
TBigInt > 512 bit integer = -2^511 .. 2^511 - 1 = ±6.703e153
'nen paar Zufallsfunktionen
- FStream.pas
IStream > Windows IStream-Interface
TnFileStream
TnMemoryStream
TnMemoryMappedStream
TnIStream > IStream-Kapselung
TnStream > TnFileStream + TnMemoryStream + TnMemoryMappedStream
- FHash.pas
Windows MD5- und SHA-API
ThMD5 > Kapselung der WinAPI
ThSHA > Kapselung der WinAPI
ThxCRC32Table > CRC32-Rechentabelle
ThxCRC32 > CRC32-"Klasse"
ThxMD5 > MD5-"Klasse" (16 Byte)
ThxRMD320 > Ripe MD320-"Klasse" ('ne Art 40 Byte-MD5)
- FResXPMan.pas
XP-Manifest
- FResXPManAdmin.pas
XP-Manifest mit Anforderung von Adminrechten
viele "Klassen" bauen auf Records auf ... können also wie jede "billige" Variable verwende werden
(also ohne Initialisation/Finalisation) und kommen vorallem ohne jeglichen Ovehead seitens der Objektverwaltung aus.
z.B.
Delphi-Quellcode:
Var Hash: ThMD5;
S: String;
Begin
Hash.Init;
Hash.Update('123');
Hash.Final;
S := Hash.asHexString;
Hash.Calc('123');
S := Hash.asHexString;
Hash.CalcFile('C:\Text.dat');
S := Hash.asHexString;
// oder gleich direkt
S := Hash.CalcFile('C:\Text.dat').asHexString;
End;
RAM-Verbrauch von z.B. ThxCRC32 und TnFileStream liegen bei genau 4 Byte ... halt genau die Recordgröße (exclusive des Verbrauchs enthaltener Windowskomponenten)
Speziell auf sowas wie TBigInt und das zukünftige TBigFloat hat der Aufbau als Record große positive Auswirkungen, denn
- Speichermanagement optimal gelöst (meißt liegt die Variable direkt im Stack, oder auf'm Heap)
also vom Typ selbst gehen keine Anfagen an den Memorymanager und Dergleichen
- die Variableninhalte liegen direkt in anderen Stuckturen (z.B. Records und Arrays) eingebettet
> es gibt keine externen Daten über Pointer und so.
= perfekt für Speicherung und Datenübertragung
(z.B. von normalen Strings kennt man es ja, daß dessen Daten woanders liegen, als die Stringvariable)
[neu]
aktueller Funktionsumfang von TBigInt:
automatische/implizite Konvertierung
von: Integer, Int64, String
nach: Integer, Int64, Float(Extended), String
explizite Konvertierung
von und nach: Int64, Integer, UInt64, LongWord/Cardinal, Currency, Extended, String
Vergleiche ( = <> < <= >= > )
mit: TBigInt, Int64, Integer, Currency, Extended, String
Operatoren ( + - * div mod and or xor )
mit: TBigInt, Int64, Integer, String
Operatoren2 ( inc
dec + - not shl shr )
Record(Klassen)-Proceduren:
Load/Save: TBigInt, Int64, Integer, UInt64, LongWord/Cardinal, String, TnStream(TnFileStream,TnMemoryStream,TnMemoryMappe dSream)
MinBigInt/MaxBigInt (Konstanten)
Compare, Add, Subtract, Multiply, Divide, Modulus, DivMod
Power, LdExp(2), LtExp(10), LxExp, ExpMod, Log2 Log10, LogN, Radic, Sqr, Sqrt,
Fibonacci, RoundTo
bAnd,
bOr,
bXor,
bNot
Inc,
Dec, Abs, NegAbs, Negative
bShl,
bShr, Rol, Ror, aShl, aShr
Sign, isZero, isPositive, isNegative, isOdd, isEven,
OpenBit(MSB), CloseBit[LSB], CountBits, OneBit[MSB+LSB]
[u]Record(Klassen)-Properties:[u]
asString, asStringT(with thousands separator), asHexString
> meißt sollte Byte und Word auch mit durch Integer abgearbeitet werden können
[/neu]
[new]
die TBigInt gibt es inzwischen auch einzeln (unabhängig von diesem Projekt)
siehe
Beitrag #13
[/new]
und dann noch ein Problem:
erstmal ist mir noch kein Name dafür eingefallen ... falls also wer eine Idee hat ...
Geschichte:
dieses Projekt ist 'ne Neuauflage meines nie veröffentlichten
UCCs,
ist allerdings nicht mehr vorrangig auf
Uni
code ausgelegt
und soll dafür eine nette Win-
API-Kapslung inlc. einiger
nonVCL-Objekte, welche hoffentlich den Zugriff erleichtern, werden.
Und dazu kommt noch 'ne kleine Funktions/Objektsamung hinzu (z.B. TBigInt und Co.)
Lizenz: da fast alles von mir selber ist, liegt das Copyright wohl auch bei mir
außer wo es explizit im QuellCode, bei den entsprechenden Funktionen, dabei steht
die Grundlagen zur FBinary.BitSwap (speziell von
BitSwap(i: LongWord): LongWord; ) hatte ich mal hier aus dem Forum, weiß aber nicht mehr von wem ... wäre schön, wenn sich dazu die Person wieder anfinden würde, damit ich diese erwähnen kann)
[add 22.01.2009]
die Hashfunktionen wurden etwas überarbeitet
siehe
Beitrag #18
- Delphi 2009 Kompatibilität
- als Einzeldatei verwendbar
(Achtung: in diesem Post wurde die Delphi 2009-Änderungen noch nicht geupdatet)
[/add]