zoukankan      html  css  js  c++  java
  • 几个 GetHashCode 函数

    几个 GetHashCode 函数:


    DBTables.pas

    Delphi/Pascal code
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
       
        function GetHashCode(Str: PChar): Integer;
        var
          Off, Len, Skip, I: Integer;
        begin
          Result := 0;
          Off := 1;
          Len := StrLen(Str);
          if Len < 16 then
            for I := (Len - 1) downto 0 do
            begin
              Result := (Result * 37) + Ord(Str[Off]);
              Inc(Off);
            end
          else
          begin
            { Only sample some characters }
            Skip := Len div 8;
            I := Len - 1;
            while I >= 0 do
            begin
              Result := (Result * 39) + Ord(Str[Off]);
              Dec(I, Skip);
              Inc(Off, Skip);
            end;
          end;
        end;

    Graphics.pas

    Delphi/Pascal code
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function GetHashCode(const Buffer; Count: Integer): Word; assembler;
    asm
            MOV     ECX,EDX
            MOV     EDX,EAX
            XOR     EAX,EAX
    @@1:    ROL     AX,5
            XOR     AL,[EDX]
            INC     EDX
            DEC     ECX
            JNE     @@1
    end;

    SysUtils.pas

    Delphi/Pascal code
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    function HashName(Name: PChar): Cardinal;
    asm
      PUSH  ESI
      PUSH  EBX
      MOV   ESI, Name
      XOR   EAX, EAX
     
    @@loop:
      ROL   EAX, 5
      MOV   BL, [ESI]
      CMP   BL, 0
      JE    @@done
      CMP   BL, 'A'
      JL    @@LowerCased
      CMP   BL, 'Z'
      JG    @@LowerCased
      OR    BL, 20H // make lower case
    @@LowerCased:
      XOR   AL, BL
      INC   ESI
      JMP   @@loop
    @@done:
      POP   EBX
      POP   ESI
      RET
    end;

    HTTPParse.pas

    Delphi/Pascal code
     
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    function GetHashCode(Ident: PChar; Length: Integer): Word;
    asm
          PUSH ESI
    {$IFNDEF PIC}
        PUSH    EBX
        XOR    EBX,EBX
    {$ENDIF}
          MOV  ESI, EAX
          XOR  EAX, EAX
          XOR  ECX, ECX
    @@1:  MOV   AL,[ESI]
          ROL    CX,5
          XOR    CL,CharValue.Byte[EBX + EAX]
          INC    ESI
          DEC    EDX
        JNE    @@1
          MOV    EAX,ECX
    {$IFNDEF PIC}
        POP    EBX
    {$ENDIF}
          POP   ESI
    end;
  • 相关阅读:
    1026: [SCOI2009]windy数 (数位DP)
    Codeforces Round #603 (Div. 2)
    小明种苹果(续)
    1001: [BeiJing2006]狼抓兔子 (最小割)
    codeforces 990C Bracket Sequences Concatenation Problem
    codeforces990D
    codeforces 1037D. Valid BFS?
    pytorch inception v3 KeyError: <class 'tuple'>解决方法
    codeforces 1025C Plasticine zebra
    codeforces1027D
  • 原文地址:https://www.cnblogs.com/bjxsky/p/4620101.html
Copyright © 2011-2022 走看看