// DatasetMerger.h #ifndef dset__DatasetMerger_H #define dset__DatasetMerger_H // David Adams // April 2004 // // A dataset merger merges a collection of datasets into a // single dataset. This is an abstract base. Concrete subclasses // implement strategies for merging. // // The state of the merge including the merged dataset is guaranteed // to change only when the update() method is invoked. // // The merger is responsible for managing the merged datasets returned // as results. These should remain valid at least until another result // is generated. #include #include #include #include "dataset_base/Dataset.h" #include "dataset_split/DatasetMergeResult.h" class XmlElement; namespace dset { class DatasetMerger { private: // Hidden functions // Hide copy and assignment. DatasetMerger(const DatasetMerger&); DatasetMerger& operator=(const DatasetMerger&); public: // Constructors and destructor. // Default constructor. DatasetMerger(); // Destructor. virtual ~DatasetMerger(); public: // Virtual methods // Validity. virtual bool is_valid() const =0; // Open. virtual bool is_open() const =0; // Append a dataset. // This dataset should not be deleted before the merge is complete. // Returns 0 for success, i.e. the new dataset is accepted. // It may still be rejected later. virtual int append(const Dataset& dst) =0; // Return the result. // This should not be blocking--if the result will require a long // time to calculate, then this method should quickly return a // (consistent) partial result. // Result should remain valid until the next call to this method or // until the merger is deleted. virtual DatasetMergeResult result() =0; // Close. // Notify merger that all datasets have been merged and it can clean // up, i.e. delete temporary results and release their files. // Datasets referenced in the current result should not be deleted. // Returns 0 for success. // Default does nothing and returns success. virtual int close() =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::DatasetMerger& rhs); #endif