On 20/03/2015 07:25, Torsten Bonde Christiansen wrote:
Hi.

Is there method in fpc to find the highest common class-type of two
derived classes?

I do not know of such a routine, though there may well be one somewhere.

I would have said that the highest common class would always be TObject, because a descendent class is usually spoken of as 'lower' rather than 'higher' than its ancestor.

I think the following does the job (perhaps rather inefficiently).

function LowestCommonClass(class1, class2: TClass): TClass;
var
  sl: TStringList;
  cp: TClass;

function FoundClassInList(aClass: TClass; out aCommonClass: TClass): boolean;
  var
    i: integer;
    s: string;
  begin
    Result:=False;
    aCommonClass:=nil;
    s:=aClass.ClassName;
    for i:=0 to sl.Count-1 do
      if SameText(sl[i], s) then begin
        aCommonClass:=TClass(sl.Objects[i]);
        Exit(True);
      end;
  end;

begin
  Result:=nil;
  sl:=TStringList.Create;
  try
    sl.AddObject(class1.ClassName, TObject(class1));
    cp:=class1.ClassParent;
    while (cp <> nil) do begin
      sl.AddObject(cp.ClassName, TObject(cp));
      cp:=cp.ClassParent;
    end;

    cp:=class2;
    while (cp <> nil) do begin
      if FoundClassInList(cp, Result) then
        Exit;
      cp:=cp.ClassParent;
    end;

  finally
    sl.Free;
  end;
end;



---
This email has been checked for viruses by Avast antivirus software.
http://www.avast.com

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to