anchor.diff:      procedure Reset;
       property Current: TMapEntry read GetCurrent;
     end;
  +
  +{$IFDEF Supports_Anonymous_Method}
  +  TMapCompareMethod = reference to function (const Entry1, Entry2: TMapEntry): Integer;
  +{$ELSE}
  +  TMapCompareMethod = function (const Entry1, Entry2: TMapEntry): Integer of object;
  +{$ENDIF}
   
     IMap = interface(IReadWriteSync)
     ['{28B78387-CB07-4C28-B642-09716DAA2170}']
  
positive.code:     function GetKeys: IImmutableList; virtual; abstract;
      function GetValues: IImmutableList; virtual; abstract;
      function GetKey(const AValue: Variant): Variant; virtual; abstract;
    public
      constructor Create(ACapacity: Integer = 16; Factor: Single = 0.75;
        Sync: Boolean = True; ReadWriteSync: Boolean = False); overload; virtual; abstract;
  
negative.code:     function GetValues: IImmutableList; override;
      function GetKey(const AValue: Variant): Variant; override;
      procedure InitData(AKeys, AValues: IList);
      function CompareKey(const Entry1, Entry2: TMapEntry): Integer; override;
      function CompareValue(const Entry1, Entry2: TMapEntry): Integer; override;
    public
      constructor Create(ACapacity: Integer = 16; Factor: Single = 0.75;
        Sync: Boolean = True; ReadWriteSync: Boolean = False); overload; override;
  