/*========================================================================= Program: GDCM (Grassroots DICOM). A DICOM library Copyright (c) 2006-2011 Mathieu Malaterre All rights reserved. See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ #ifndef GDCMSORTER_H #define GDCMSORTER_H #include "gdcmDirectory.h" #include "gdcmTag.h" #include #include #include #include namespace gdcm { class DataSet; /** * \brief Sorter * \details General class to do sorting using a custom function * You simply need to provide a function of type: Sorter::SortFunction * * \warning implementation details. For now there is no cache mechanism. Which means * that every time you call Sort, all files specified as input parameter are *read* * * \see Scanner */ class GDCM_EXPORT Sorter { friend std::ostream& operator<<(std::ostream &_os, const Sorter &s); public: Sorter(); virtual ~Sorter(); /// Typically the output of Directory::GetFilenames() virtual bool Sort(std::vector const & filenames); /// Return the list of filenames as sorted by the specific algorithm used. /// Empty by default (before Sort() is called) const std::vector &GetFilenames() const { return Filenames; } /// Print void Print(std::ostream &os) const; /// UNSUPPORTED FOR NOW bool AddSelect( Tag const &tag, const char *value ); /// Specify a set of tags to be read in during the sort procedure. /// By default this set is empty, in which case the entire image, /// including pixel data, is read in. void SetTagsToRead( std::set const & tags ); /// Set the sort function which compares one dataset to the other typedef bool (*SortFunction)(DataSet const &, DataSet const &); void SetSortFunction( SortFunction f ); virtual bool StableSort(std::vector const & filenames); protected: std::vector Filenames; typedef std::map SelectionMap; std::map Selection; SortFunction SortFunc; std::set TagsToRead; }; //----------------------------------------------------------------------------- inline std::ostream& operator<<(std::ostream &os, const Sorter &s) { s.Print( os ); return os; } } // end namespace gdcm #endif //GDCMSORTER_H