anchor.diff:  procedure TmIntegerDictionary.Add(const aIntegerKey: integer; aObject: TObject);
   begin
     FImpl._Add(aIntegerKey, aObject);
  +  InternalAdd(aObject);
   end;
   
   function TmIntegerDictionary.Find(const aIntegerKey: integer): TObject;
  
positive.code: end;
  
  procedure TmStringDictionary.Remove(const aStringKey: String);
  begin
    FImpl._Remove(aStringKey);
  end;
  
  procedure TmStringDictionary.Clear;
  begin
    FImpl._Clear;
  end;
  
  function TmStringDictionary.Count: integer;
  
negative.code: 
  implementation
  
  uses
    sysutils;
  
  { TmBaseDictionary }
  
  procedure TmBaseDictionary.InternalAdd(const aObject: TObject);
  begin
    if FOwnsObjects and Assigned(aObject) then
      FGarbage.Add(aObject);
  end;
  
  procedure TmBaseDictionary.InternalRemove(aObject: TObject);
  begin
    if FOwnsObjects and Assigned(aObject) then
      FGarbage.Remove(aObject);
  end;
  
  procedure TmBaseDictionary.InternalClear;
  begin
    if FOwnsObjects then
      FGarbage.Clear;
  end;
  
  constructor TmBaseDictionary.Create(const aOwnsObjects: boolean);
  begin
    FOwnsObjects:= aOwnsObjects;
    if FOwnsObjects then
      FGarbage := TObjectList.Create(true);
  end;
  
  destructor TmBaseDictionary.Destroy;
  begin
    FreeAndNil(FGarbage);
    inherited Destroy;
  end;
  
  { TmIntegerDictionary }
  
  constructor TmIntegerDictionary.Create(const aOwnsObjects : boolean = false);
  begin
    inherited;
    FImpl := CreateTmIntegerDictionary;
  end;
  
  