3 Serializing an Array

3.1 Serialization Description File

Serialization description file for a class containing an array and some C++ code blocks:

        // bookshelf.xmlser:

        [hpp]#include <book.hpp>

        class Bookshelf
        {
        <%
            int BookCount() const
            {
                return books.size();
            }
            void AddBook(const Book& book);
        %>
            Book[] books;
        }

        <%
            void Bookshelf::AddBook(const Book& book)
            {
                books.push_back(book);
            }
        %>
    

An array is denoted by square brackets. The C++ type for it is std::vector.

You can put arbitrary C++ code in a C++ code block delimited by <% and %>. A code block within a class is placed to the generated header file. A code block after classes is placed to the generated source file.

3.2 Main Program

I have added another book and placed the books to an array of books inside a bookshelf object:

        // ...

        Book book;
        book.name = "The C++ Programming Language, 4th Edition";
        book.isbn = "0-321-56384-0";
        book.author = "Bjarne Stroustrup";
        book.published = 2013;
        book.publisher = "Pearson Education";
        book.price = 61.88f;
        book.color = Color::blue;

        Book anotherBook;
        anotherBook.name = "The Art of Computer Programming";
        anotherBook.isbn = "0-201-89683-4";
        anotherBook.author = "Donald E. Knuth";
        anotherBook.published = 1997;
        anotherBook.publisher = "Addison Wesley Longman";
        anotherBook.price = 187.99f;
        anotherBook.color = Color::white;

        Bookshelf bookshelf;
        bookshelf.AddBook(book);
        bookshelf.AddBook(anotherBook);

        std::unique_ptr<sngxml::dom::Element> element = bookshelf.ToXml("bookshelf");

        // ...

        Bookshelf bookshelfRead;
        bookshelfRead.FromXml(docRead->DocumentElement());
        std::cout << bookshelfRead.BookCount() << std::endl;

        // ...
    

3.3 Program Output

The program output looks like this:

        <bookshelf classId="-1" className="Bookshelf" objectId="00000000-0000-0000-0000-000000000000">
            <books>
                <item classId="-1" className="Book" objectId="00000000-0000-0000-0000-000000000000">
                    <name value="The C++ Programming Language, 4th Edition" />
                    <isbn value="0-321-56384-0" />
                    <author value="Bjarne Stroustrup" />
                    <published value="2013" />
                    <publisher value="Pearson Education" />
                    <price value="61.880001" />
                    <color value="2" />
                </item>
                <item classId="-1" className="Book" objectId="00000000-0000-0000-0000-000000000000">
                    <name value="The Art of Computer Programming" />
                    <isbn value="0-201-89683-4" />
                    <author value="Donald E. Knuth" />
                    <published value="1997" />
                    <publisher value="Addison Wesley" />
                    <price value="187.990005" />
                    <color value="1" />
                </item>
            </books>
        </bookshelf>

        2