// DatasetMergerCreator.h #ifndef dset__DatasetMergerCreator_H #define dset__DatasetMergerCreator_H // Base class for factory to create dataset mergers. // // This is an abtract base. #include #include #include "dataset_base/Dataset.h" class XmlElement; namespace dset { class DatasetMerger; class DatasetMergerCreator { public: // Typedefs. // Pointer to a function to create a merger creator from an XML element. typedef const DatasetMergerCreator* (*Creator) (const XmlElement&); // Creator name. typedef std::string CreatorName; // List of Creator Names. typedef std::vector CreatorList; public: // Static methods. // Create a merger creator from an XML description. // Caller is responsible for managing the creator. // The creator is selected using ele.name(). static const DatasetMergerCreator* create(const XmlElement& ele); // Register a creator. // Returns 0 for success. // Fails if name is already used for a different creator. static int register_creator(std::string name, Creator pfun); // Return list of registered creators. static const CreatorList& creators(); // Return if a creator is registered. static bool has_creator(CreatorName name); public: // Virtual methods // Destructor. virtual ~DatasetMergerCreator(); // Validity. virtual bool is_valid() const =0; // Return a new merger instance. // Caller is responsible for management. // Argument is the working directory for the creator. virtual DatasetMerger* create(std::string dir) const =0; // Write to XML. virtual const XmlElement* xml() const =0; // Output stream. virtual std::ostream& ostr(std::ostream& str) const =0; }; } // end namespace dset // Free functions. std::ostream& operator<<(std::ostream& lhs, const dset::DatasetMergerCreator& rhs); #endif