// VirtualEventDataset.cxx #include "dataset_base/VirtualEventDataset.h" #include #include #include #include "dataset_util/XmlElement.h" #include "dataset_util/DtdRegistry.h" #include "dataset_id/DatasetIdList.h" #include "dataset_base/DatasetCreator.h" using std::string; using std::ostream; using std::endl; using std::auto_ptr; using dset::Dataset; using dset::DatasetCreator; using dset::GenericDataset; using dset::VirtualEventDataset; //********************************************************************** // Local definitions. //********************************************************************** namespace { // Promoter. const GenericDataset* promote(const GenericDataset& gen) { return new VirtualEventDataset(gen, 1); } // Register promoter. int VirtualEventDataset_xml_stat = GenericDataset:: register_promoter("VirtualEventDataset", promote); } // end unnamed namespace. //********************************************************************** // Member functions. //********************************************************************** // Construct from content and events. VirtualEventDataset::VirtualEventDataset() { set_invalid(); } //********************************************************************** // Constructor from content. VirtualEventDataset::VirtualEventDataset(const Content& con) { if ( con.blocks().size() != 1 ) { set_error(21); return; } set_fulltype("VirtualEventDataset"); set_id(); set_content(con); set_virtual(); if ( con.front().has_events() ) { set_evstate_first(); } else { set_evstate_none(); } } //********************************************************************** // Constructor from dataset. VirtualEventDataset::VirtualEventDataset(const Dataset& dst) : GenericDataset(dst.content(), "VirtualEventDataset") { set_parent_id(dst.parent_id()); if ( ! dst.is_valid() ) set_error(dst.error()); } //********************************************************************** // Constructor for promotion. VirtualEventDataset::VirtualEventDataset(const GenericDataset& gen, int) : GenericDataset(gen) { if ( fulltype() != "VirtualEventDataset" ) set_error(11); } //********************************************************************** // Merge. int VirtualEventDataset::merge(const Dataset& dst, string) { if ( dst.content().has_nonevent_content() ) return 11; if ( dst.content().blocks().size() != 1 ) return 12; if ( dst.content().blocks().front().content_ids() != content().blocks().front().content_ids() ) return 13; if ( ! dst.is_virtual() ) return 14; Content con = content(); if ( con.merge(dst.content()) ) return 15; if ( con.blocks().size() != 1 ) return 16; if ( reset_content(con) ) return 17; return 0; } //**********************************************************************