easyDelphi Q&A
+4 تصويتات
29 مشاهدات
كيف اعرف نمط صحيح جديد للدلفي بدقه 128 بت

يفضل ان يكون مبسط بالعمليات الاساسيه فقط و باستخدام Record مع class operator
سُئل في تصنيف vcl بواسطة (800 نقاط) | 29 مشاهدات
 

1 إجابة واحدة

+3 تصويتات

أولا أشكرك كثيرا على هذا السؤال الرائع ...

ثانيا : بعد البحث في الأنترنات فقد تحصلت على الأجابة التي تريد ... 

ــأولا الحل ـالأول : الرابط من هنا.

إنها مكتبة جد رائعة من الشركة : fundamentals. ولكن من دون class operator.

تعريف :

Fundamentals 5 Library
Fundamentals 5 Code Library for FreePascal and Delphi

Includes:

String, DateTime and dynamic array routines
Unicode routines
Hash (e.g. SHA256, SHA512, SHA1, SHA256, MD5)
Integer (e.g. Word128, Word256, Int128, Int256)
Huge Word, Huge Integer
Decimal (Decimal32, Decimal64, Decimal128, HugeDecimal and signed decimals)
Random number generators
Ciphers (symmetric: AES, DES, RC2, RC4; asymmetric: RSA, Diffie-Hellman)
Data structures (array and dictionary classes)
Mathematics (Rational number, complex number, vector, matrix, statistics)
JSON parser
Google protocol buffer parser, utilities and Pascal code generator
Socket library (cross platform - Windows and Linux)
TLS Client
TLS Server
TCP Client
TCP Server
HTTP Client
HTTP Server

مثال الوحدة flcInteger.pas : 

unit flcInteger;

interface

uses
  { Fundamentals }
  flcStdTypes;



{                                                                              }
{ Word structures                                                              }
{                                                                              }
type
  Word32Pair = packed record
    case Integer of
    0 : (A, B    : Word32);
    1 : (Bytes   : array[0..7] of Byte);
    2 : (Words   : array[0..3] of Word);
    3 : (Word32s : array[0..1] of Word32);
  end;
  PWord32Pair = ^Word32Pair;

  Word64 = packed record
    case Integer of
    0 : (Bytes   : array[0..7] of Byte);
    1 : (Words   : array[0..3] of Word);
    2 : (Word32s : array[0..1] of Word32);
  end;
  PWord64 = ^Word64;

  Word128 = packed record
    case Integer of
    0 : (Bytes   : array[0..15] of Byte);
    1 : (Words   : array[0..7] of Word);
    2 : (Word32s : array[0..3] of Word32);
    3 : (Word64s : array[0..1] of Word64);
  end;
  PWord128 = ^Word128;

  Word256 = packed record
    case Integer of
    0 : (Bytes    : array[0..31] of Byte);
    1 : (Words    : array[0..15] of Word);
    2 : (Word32s  : array[0..7] of Word32);
    3 : (Word64s  : array[0..3] of Word64);
    4 : (Word128s : array[0..1] of Word128);
  end;
  PWord256 = ^Word256;

  Word512 = packed record
    case Integer of
    0 : (Bytes    : array[0..63] of Byte);
    1 : (Words    : array[0..31] of Word);
    2 : (Word32s  : array[0..15] of Word32);
    3 : (Word64s  : array[0..7] of Word64);
    4 : (Word128s : array[0..3] of Word128);
    5 : (Word256s : array[0..1] of Word256);
  end;
  PWord512 = ^Word512;

  Word1024 = packed record
    case Integer of
    0 : (Bytes    : array[0..127] of Byte);
    1 : (Words    : array[0..63] of Word);
    2 : (Word32s  : array[0..31] of Word32);
    3 : (Word64s  : array[0..15] of Word64);
    4 : (Word128s : array[0..7] of Word128);
    5 : (Word256s : array[0..3] of Word256);
    6 : (Word512s : array[0..1] of Word512);
  end;
  PWord1024 = ^Word1024;

  Word2048 = packed record
    case Integer of
    0 : (Bytes     : array[0..255] of Byte);
    1 : (Words     : array[0..127] of Word);
    2 : (Word32s   : array[0..63] of Word32);
    3 : (Word64s   : array[0..31] of Word64);
    4 : (Word128s  : array[0..15] of Word128);
    5 : (Word256s  : array[0..7] of Word256);
    6 : (Word512s  : array[0..3] of Word512);
    7 : (Word1024s : array[0..1] of Word1024);
  end;
  PWord2048 = ^Word2048;

  Word4096 = packed record
    case Integer of
    0 : (Bytes     : array[0..511] of Byte);
    1 : (Words     : array[0..255] of Word);
    2 : (Word32s   : array[0..127] of Word32);
    3 : (Word64s   : array[0..63] of Word64);
    4 : (Word128s  : array[0..31] of Word128);
    5 : (Word256s  : array[0..15] of Word256);
    6 : (Word512s  : array[0..7] of Word512);
    7 : (Word1024s : array[0..3] of Word1024);
    8 : (Word2048s : array[0..1] of Word2048);
  end;
  PWord4096 = ^Word4096;

  Word8192 = packed record
    case Integer of
    0 : (Bytes     : array[0..1023] of Byte);
    1 : (Words     : array[0..511] of Word);
    2 : (Word32s   : array[0..255] of Word32);
    3 : (Word64s   : array[0..127] of Word64);
    4 : (Word128s  : array[0..63] of Word128);
    5 : (Word256s  : array[0..31] of Word256);
    6 : (Word512s  : array[0..15] of Word512);
    7 : (Word1024s : array[0..7] of Word1024);
    8 : (Word2048s : array[0..3] of Word2048);
    9 : (Word4096s : array[0..1] of Word4096);
  end;
  PWord8192 = ^Word8192;

const
  Word8Size    = SizeOf(Word8);
  Word16Size   = SizeOf(Word16);
  Word32Size   = SizeOf(Word32);
  Word64Size   = SizeOf(Word64);
  Word128Size  = SizeOf(Word128);
  Word256Size  = SizeOf(Word256);
  Word512Size  = SizeOf(Word512);
  Word1024Size = SizeOf(Word1024);
  Word2048Size = SizeOf(Word2048);
  Word4096Size = SizeOf(Word4096);
  Word8192Size = SizeOf(Word8192);

const
  MinWord8      = Low(Word8);
  MaxWord8      = High(Word8);
  MinWord16     = Low(Word16);
  MaxWord16     = High(Word16);
  MinWord32     = Word32(Low(Word32));
  MaxWord32     = Word32(High(Word32));



{                                                                              }
{ Integer structures                                                           }
{                                                                              }
type
  Int32Pair = packed record
    case Integer of
    0 : (A, B      : Int32);
    1 : (Bytes     : array[0..7] of Byte);
    2 : (Words     : array[0..3] of Word);
    3 : (Word32s   : array[0..1] of Word32);
    4 : (ShortInts : array[0..7] of ShortInt);
    5 : (SmallInts : array[0..3] of SmallInt);
    6 : (Int32s  : array[0..1] of Int32);
  end;
  PInt32Pair = ^Int32Pair;

  Int64Rec = packed record
    case Integer of
    0 : (Bytes   : array[0..7] of Byte);
    1 : (Words   : array[0..3] of Word);
    2 : (Word32s : array[0..1] of Word32);
    3 : (Int32s : array[0..1] of Int32);
  end;
  PInt64Rec = ^Int64Rec;

  Int128 = packed record
    case Integer of
    0 : (Bytes     : array[0..15] of Byte);
    1 : (Words     : array[0..7] of Word);
    2 : (Word32s : array[0..3] of Word32);
    3 : (Word64s   : array[0..1] of Word64);
    4 : (Int32s  : array[0..3] of Int32);
    5 : (Int64s    : array[0..1] of Int64);
  end;
  PInt128 = ^Int128;

 

أما التي تشترط فيها class operator فالرابط هنا.

تحميل الملف من هنا.

ملاحظة: هذة الأخيرة لا تعمل إلا مع الدالفي 64 كومبايلر .

 

تم الرد عليه بواسطة (14,010 نقاط)
عُدل بواسطة
شكرا للاجابه.  
بالنسبه للمكتبه الاخيره فهي اولا مكتبه بلغه الاله و ثانيا كما ذكرت تعمل مع دلفي 64 بت من الصعب الاعتماد عليها :(
بالنسبه لمكتبه fundamentals هل من الممكن فصل الكود الخاص بالتعامل مع Int128 بشكل مبسط و مع العمليات الاساسيه فقط ؟
أشكرك كثيرا على التوضيحات ...
 أولا : بالنسبه للمكتبه الاخيره لبس كلها بلغة الألة (رغم أن Assembly هي لغة يفهمها الأنسان) أما أنها تعمل على دلفي 64 بت فقط... فهذا لأن الكود Assembley المستعمل فيها هو موجه فقط ليعمل غلى دلفي 64 بت كومبايلر ...
ثانيا : بالنسبه لمكتبه fundamentals هل من الممكن فصل الكود الخاص بالتعامل مع Int128 بشكل مبسط و مع العمليات الاساسيه فقط ؟ هذا عمل يتطلب مني الكثير من الجهد .. لكن لا ضير في أن تقوم بمراسلة الفريق على الأيمايل الخاص بهم ... أضنني لاحظت أنهم قد وضعو الأيمايل في كل وحدة من الوحدات التي تنتمي لهم ..
E-mail:           fundamentals.library at gmail.com

في الأخير أعتذر بقوة إن لم تكن إجابتي أو حتى تعليقي هذا في المستوى الذي تريد ... و شكرا لتفهمك ...

اسئلة متعلقة

+4 تصويتات
2 إجابة
سُئل أغسطس 4 في تصنيف vcl بواسطة مجهول | 50 مشاهدات
+4 تصويتات
1 إجابة
سُئل أكتوبر 29 في تصنيف vcl بواسطة alhmam (710 نقاط) | 26 مشاهدات
0 تصويتات
1 إجابة
سُئل أغسطس 31 في تصنيف vcl بواسطة Yamada Fakir (1,330 نقاط) | 60 مشاهدات
+4 تصويتات
1 إجابة
ادعُ اصدقائك في الفايسبوك لمشاركتك

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

267 سؤال
476 إجابة
833 تعليق
163 مستخدم