Serialization + semantics of toString

Jacob Carlborg doob at me.com
Fri Nov 13 07:01:27 PST 2009


On 11/13/09 15:17, Denis Koroskin wrote:
> On Fri, 13 Nov 2009 17:11:54 +0300, Jacob Carlborg <doob at me.com> wrote:
>
>> On 11/13/09 00:13, aarti_pl wrote:
>>> Andrei Alexandrescu pisze:
>>> > But that being said, I'd so much want to start thinking of an actual
>>> > text serialization infrastructure. Why develop one later with the
>>> > mention "well use that stuff for debugging only, this is the real
>>> stuff."
>>> >
>>> > Andrei
>>>
>>> You might want to see my serialization library for D.
>>>
>>> I think that it is worth noting as it manages to achieve the goal:
>>> same data - completely different output. Because this output might be
>>> defined by user in the way she wants, it seems that this can work
>>> exactly the way toString should work.
>>>
>>> It is achieved by using Archive classes which makes proper formatting,
>>> and which are completely independent from data being printed. Initial
>>> design is based on C++ Boost. I just extended concept a bit and adopted
>>> it to D.
>>>
>>> Basic interface for serialization is like this:
>>>
>>> auto serializer = Serializer!(TextArchive);
>>> //It might be also e.g.:
>>> //auto serializer = Serializer!(JsonArchive);
>>> auto input = new TransparentClass(-21, 2.11, "text1", 128, -127);
>>> auto output = serializer.dump(input);
>>> assert(serializer.load!(TransparentClass)(output) == input);
>>>
>>> In case of transparent classes (every field is public) you don't need
>>> any method inside of serialized class/struct.
>>>
>>> In case of opaque classes there is enough to:
>>> 1. add mixin inside:
>>> mixin Serializable;
>>> or
>>> 2. add template method:
>>> void describeUdt(T)(T arch) {
>>> arch.describeStaticArray(array, array.stringof);
>>> }
>>
>> Or you could use arhc.typeof[i] to access/set the values (even
>> private) of a struct/class.
>>
>
> You mean .tupleof? Just tested and it really works (wow!), didn't know
> about that. Thanks!

Yes, tupleof



More information about the Digitalmars-d mailing list