[fpc-pascal] cloning data containers
iz.iznogood at gmail.com
Sun Dec 28 02:08:24 CET 2014
Sven made a good point on records. However most of the time it is easier to
Also you might be able to write some code to copy the property values using
rtti so you can avoid the read/write component and the extra overhead. It
will work for TPersistent descendants but might be tricky to cover all
Your proposal on the name/value pair reminds me of Qt but in the Delphi/Fpc
world it is done with rtti.
Στις 28 Δεκ 2014 2:56 π.μ., ο χρήστης "Marc Santhoff" <M.Santhoff at web.de>
> On Sa, 2014-12-27 at 19:56 +0200, Chriss Kalogeropoulos wrote:
> > Hi,
> > FPC does not support copy-construction so either you must override the
> > TPersistent.Assign method or in case of TComponent you can use
> > ReadComponent/WriteComponent.
> > You should also take into account deep vs swallow copy semantics as well
> > the type of the container and contained classes
> > (TPersistent/TCmponent/TCollection descendant).
> TCollection is a good idea. Life could be easier if all data container
> classes would keep their properties in a name/value hash.
> You're right, looking at the implementation of TPersistent and
> TComponent and comparing the overhead to simple data classes is on my
> And of course I'm aware of the shallow copy vs. deep copy problem.
> > For records I am not sure, probably you should need a method on the
> > container or check on some internal (compiler magic) functions such as
> > CopyRecord and others.
> Currently I'm dealing with records, so there is my first target.
> I feared it would be that way. I think writing an extension for Lazarus
> and linking it into the "source" or "refactoring" menu will be a lot
> less work, I'll have a deeper look.
> > Hope that helps.
> It does, thank you.
> > Chriss
> > On Dec 27, 2014 6:22 PM, "Marc Santhoff" <M.Santhoff at web.de> wrote:
> > > On Sa, 2014-12-27 at 16:45 +0100, Bart wrote:
> > > > On 12/27/14, Marc Santhoff <M.Santhoff at web.de> wrote:
> > > >
> > > > > function clone(data_in: a_record): a_record;
> > > > > var
> > > > > data: Pa_record;
> > > > > begin
> > > > > new(data);
> > > > data^ := data_in; //should work*
> > > > > end;
> > > >
> > > > * Might not be a good idea if data contains a class(reference).
> > >
> > > Oops, I just typed that away and did not hit CTRL-F9 - which is useless
> > > in the mailer anyway. ;)
> > >
> > > --
> > > Marc Santhoff <M.Santhoff at web.de>
> > >
> > > _______________________________________________
> > > fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> > > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
> > >
> > _______________________________________________
> > fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
> Marc Santhoff <M.Santhoff at web.de>
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the fpc-pascal