Hi Robert,

On 23 February 2010 01:13, Robert Ramey <ramey@rrsd.com> wrote:
Paul wrote:
> Hi,
>
> I use xml_woarchive and xml_wiarchive for reading/writing
> configuration files.
>
> It seems work work well for me, but now I'd like to see if I can do
> more with it... is it possible to load an XML serialized file, but
> completely IGNORE a subtree of the XML file if desired?

Anything is possible if you're willing to change the code that's in there.

I'm concerned about the "class_id" magic that might not be skippable.  See below



> eg
> template <class Archive>
> void load( Archive & ar, MyConfig & c, const unsigned int version )
> {
>    ar >> make_nvp("standard",c.standard);
>    if (some_global_flag_or_whatever)
>      ar >> make_nvp("advanced", c.advanced);
>    else
>      ar.skip("advanced");  // key bit
> }

Something like the following might be made to work.

ar >> c.standard
if(flag)
   ar >> c.advanced
else{
   Advanced a; // to be thrown away
   ar >> a
}



And what if "Advanced" is part of a module that may not be linked into the app ?

The "lite" version doesn't have "Advanced", but the "full" version does.

The code above doesn't describe how I was going to achieve that, but basically I was going to delegate the serialization of modules, something like

void load(ar, modules, version)
{
   string module_name;
   ar << module_name;
   ModuleManager::load_if_possible(config.module, module_name);
}


So if the module isn't available, then its not possible to deserialize the information, even into a temporary object.  The code isn't linked in.


I had another look at the basic_oarchive code and an XML archive.  As you know, the first time a class is serialized, the tag header will also include a class_id="x" tracking="y"  version="z"... but if I need to skip an entire subtree, it may miss that first visitation.

If EVERY tag included that information, or at least the class_id number, then I could write a new XML archive that would be able to skip subtrees.

By the way, is there a reason why there is no YAML archive format?  Why only XML as a human-readable option?


Thanks,
Paul