29 #ifndef CDPL_BASE_DATAIOMANAGER_HPP
30 #define CDPL_BASE_DATAIOMANAGER_HPP
60 class FeatureContainer;
66 template <
typename T,
typename CVT>
68 template <
typename T,
typename CVT>
108 template <
typename T>
120 typedef std::vector<InputHandlerPointer> InputHandlerList;
121 typedef std::vector<OutputHandlerPointer> OutputHandlerList;
360 static DataIOManager& getInstance();
362 InputHandlerList inputHandlers;
363 OutputHandlerList outputHandlers;
369 # define _CDPL_BASE_API
371 # define _CDPL_BASE_API CDPL_BASE_API
374 extern template class _CDPL_BASE_API DataIOManager<Chem::Molecule>;
376 extern template class _CDPL_BASE_API DataIOManager<Chem::MolecularGraph>;
378 extern template class _CDPL_BASE_API DataIOManager<Chem::Reaction>;
380 extern template class _CDPL_BASE_API DataIOManager<Pharm::Pharmacophore>;
382 extern template class _CDPL_BASE_API DataIOManager<Pharm::FeatureContainer>;
384 extern template class _CDPL_BASE_API DataIOManager<Grid::RegularGrid<double, double> >;
386 extern template class _CDPL_BASE_API DataIOManager<Grid::RegularGridSet<double, double> >;
388 extern template class _CDPL_BASE_API DataIOManager<Vis::Object3D>;
390 #undef _CDPL_BASE_API
399 template <
typename T>
402 static DataIOManager<T> instance;
407 template <
typename T>
410 getInstance().inputHandlers.push_back(handler);
413 template <
typename T>
416 getInstance().outputHandlers.push_back(handler);
419 template <
typename T>
422 InputHandlerList& handlers = getInstance().inputHandlers;
424 typename InputHandlerList::iterator it = std::find_if(handlers.begin(), handlers.end(),
425 std::bind(std::equal_to<DataFormat>(), std::ref(fmt),
427 if (it != handlers.end()) {
435 template <
typename T>
438 OutputHandlerList& handlers = getInstance().outputHandlers;
440 typename OutputHandlerList::iterator it = std::find_if(handlers.begin(), handlers.end(),
441 std::bind(std::equal_to<DataFormat>(), std::ref(fmt),
443 if (it != handlers.end()) {
451 template <
typename T>
454 InputHandlerList& handlers = getInstance().inputHandlers;
456 typename InputHandlerList::iterator it = std::find(handlers.begin(), handlers.end(), handler);
458 if (it != handlers.end()) {
466 template <
typename T>
469 OutputHandlerList& handlers = getInstance().outputHandlers;
471 typename OutputHandlerList::iterator it = std::find(handlers.begin(), handlers.end(), handler);
473 if (it != handlers.end()) {
481 template <
typename T>
484 InputHandlerList& handlers = getInstance().inputHandlers;
486 if (idx >= handlers.size())
487 throw IndexError(
"DataIOManager: handler index out of bounds");
489 handlers.erase(handlers.begin() + idx);
492 template <
typename T>
495 using namespace std::placeholders;
497 OutputHandlerList& handlers = getInstance().outputHandlers;
499 if (idx >= handlers.size())
500 throw IndexError(
"DataIOManager: handler index out of bounds");
502 handlers.erase(handlers.begin() + idx);
505 template <
typename T>
509 InputHandlerList& handlers = getInstance().inputHandlers;
511 if (it < handlers.begin() || it >= handlers.end())
512 throw RangeError(
"DataIOManager: input-handler iterator out of valid range");
514 return handlers.erase(it);
517 template <
typename T>
521 OutputHandlerList& handlers = getInstance().outputHandlers;
523 if (it < handlers.begin() || it >= handlers.end())
524 throw RangeError(
"DataIOManager: output-handler iterator out of valid range");
526 return handlers.erase(it);
529 template <
typename T>
532 return getInstance().inputHandlers.size();
535 template <
typename T>
538 return getInstance().outputHandlers.size();
541 template <
typename T>
544 const InputHandlerList& handlers = getInstance().inputHandlers;
546 if (idx >= handlers.size())
547 throw IndexError(
"DataIOManager: handler index out of bounds");
549 return handlers[idx];
552 template <
typename T>
555 const OutputHandlerList& handlers = getInstance().outputHandlers;
557 if (idx >= handlers.size())
558 throw IndexError(
"DataIOManager: handler index out of bounds");
560 return handlers[idx];
563 template <
typename T>
566 return getInstance().inputHandlers.begin();
569 template <
typename T>
572 return getInstance().inputHandlers.end();
575 template <
typename T>
578 return getInstance().outputHandlers.begin();
581 template <
typename T>
584 return getInstance().outputHandlers.end();
587 template <
typename T>
590 const InputHandlerList& handlers = getInstance().inputHandlers;
592 typename InputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
593 std::bind(std::equal_to<DataFormat>(), std::ref(fmt),
598 template <
typename T>
601 const InputHandlerList& handlers = getInstance().inputHandlers;
603 typename InputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
604 std::bind(&DataFormat::matchesFileExtension,
606 std::ref(file_ext)));
610 template <
typename T>
613 auto& handlers = getInstance().inputHandlers;
614 std::string file_ext;
616 for (std::string::size_type i = file_name.find_first_of(
'.', 0); i != std::string::npos; i = file_name.find_first_of(
'.', i)) {
617 file_ext = file_name.substr(++i);
619 auto it = std::find_if(handlers.begin(), handlers.end(), [&](
const InputHandlerPointer& handler) {
620 return handler->getDataFormat().matchesFileExtension(file_ext);
623 if (it != handlers.end())
630 template <
typename T>
633 const InputHandlerList& handlers = getInstance().inputHandlers;
635 typename InputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
636 std::bind(&DataFormat::matchesName,
642 template <
typename T>
645 const InputHandlerList& handlers = getInstance().inputHandlers;
647 typename InputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
648 std::bind(&DataFormat::matchesMimeType,
650 std::ref(mime_type)));
654 template <
typename T>
657 const OutputHandlerList& handlers = getInstance().outputHandlers;
659 typename OutputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
660 std::bind(std::equal_to<DataFormat>(), std::ref(fmt),
665 template <
typename T>
668 const OutputHandlerList& handlers = getInstance().outputHandlers;
670 typename OutputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
671 std::bind(&DataFormat::matchesName,
677 template <
typename T>
680 const OutputHandlerList& handlers = getInstance().outputHandlers;
682 typename OutputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
683 std::bind(&DataFormat::matchesFileExtension,
685 std::ref(file_ext)));
689 template <
typename T>
692 auto& handlers = getInstance().outputHandlers;
693 std::string file_ext;
695 for (std::string::size_type i = file_name.find_first_of(
'.', 0); i != std::string::npos; i = file_name.find_first_of(
'.', i)) {
696 file_ext = file_name.substr(++i);
698 auto it = std::find_if(handlers.begin(), handlers.end(), [&](
const OutputHandlerPointer& handler) {
699 return handler->getDataFormat().matchesFileExtension(file_ext);
702 if (it != handlers.end())
709 template <
typename T>
712 const OutputHandlerList& handlers = getInstance().outputHandlers;
714 typename OutputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
715 std::bind(&DataFormat::matchesMimeType,
717 std::ref(mime_type)));
Definition of the preprocessor macro CDPL_BASE_API.
Definition of exception classes.
Definition of the class CDPL::Base::DataOutputHandler.
A singleton class that serves as a global registry for Base::DataInputHandler and Base::DataOutputHan...
Definition: DataIOManager.hpp:110
static OutputHandlerPointer getOutputHandlerByMimeType(const std::string &mime_type)
Returns a pointer to a Base::DataOutputHandler implementation instance registered for the data format...
Definition: DataIOManager.hpp:710
static InputHandlerPointer getInputHandlerByName(const std::string &name)
Returns a pointer to a Base::DataInputHandler implementation instance registered for the data format ...
Definition: DataIOManager.hpp:631
static void registerInputHandler(const InputHandlerPointer &handler)
Registers the specified Base::DataInputHandler implementation instance.
Definition: DataIOManager.hpp:408
OutputHandlerList::iterator OutputHandlerIterator
An iterator used to iterate over the list of registered output handlers.
Definition: DataIOManager.hpp:132
static std::size_t getNumOutputHandlers()
Returns the number of registered Base::DataOutputHandler implementation instances.
Definition: DataIOManager.hpp:536
DataInputHandler< T > InputHandlerType
Definition: DataIOManager.hpp:113
static InputHandlerPointer getInputHandlerByFormat(const DataFormat &fmt)
Returns a pointer to a Base::DataInputHandler implementation instance registered for the specified da...
Definition: DataIOManager.hpp:588
static OutputHandlerIterator getOutputHandlersEnd()
Returns an iterator pointing to the end of the list of registered Base::DataOutputHandler implementat...
Definition: DataIOManager.hpp:582
static OutputHandlerIterator getOutputHandlersBegin()
Returns an iterator pointing to the beginning of the list of registered Base::DataOutputHandler imple...
Definition: DataIOManager.hpp:576
static bool unregisterInputHandler(const DataFormat &fmt)
Unregisters the Base::DataInputHandler implementation instance for the specified data format.
Definition: DataIOManager.hpp:420
static void registerOutputHandler(const OutputHandlerPointer &handler)
Registers the specified Base::DataOutputHandler implementation instance.
Definition: DataIOManager.hpp:414
static const InputHandlerPointer & getInputHandler(std::size_t idx)
Returns a reference to the registered Base::DataInputHandler implementation instance with the specifi...
Definition: DataIOManager.hpp:542
static OutputHandlerPointer getOutputHandlerByFileName(const std::string &file_name)
Returns a pointer to a Base::DataOutputHandler implementation instance registered for the data format...
Definition: DataIOManager.hpp:690
OutputHandlerType::SharedPointer OutputHandlerPointer
Definition: DataIOManager.hpp:117
InputHandlerList::iterator InputHandlerIterator
An iterator used to iterate over the list of registered input handlers.
Definition: DataIOManager.hpp:127
static std::size_t getNumInputHandlers()
Returns the number of registered Base::DataInputHandler implementation instances.
Definition: DataIOManager.hpp:530
static OutputHandlerPointer getOutputHandlerByFileExtension(const std::string &file_ext)
Returns a pointer to a Base::DataOutputHandler implementation instance registered for the data format...
Definition: DataIOManager.hpp:678
static InputHandlerPointer getInputHandlerByMimeType(const std::string &mime_type)
Returns a pointer to a Base::DataInputHandler implementation instance registered for the data format ...
Definition: DataIOManager.hpp:643
DataOutputHandler< T > OutputHandlerType
Definition: DataIOManager.hpp:114
static bool unregisterOutputHandler(const DataFormat &fmt)
Unregisters the Base::DataOutputHandler implementation instance for the specified data format.
Definition: DataIOManager.hpp:436
static InputHandlerPointer getInputHandlerByFileExtension(const std::string &file_ext)
Returns a pointer to a Base::DataInputHandler implementation instance registered for the data format ...
Definition: DataIOManager.hpp:599
static const OutputHandlerPointer & getOutputHandler(std::size_t idx)
Returns a reference to the registered Base::DataOutputHandler implementation instance with the specif...
Definition: DataIOManager.hpp:553
static OutputHandlerPointer getOutputHandlerByName(const std::string &name)
Returns a pointer to a Base::DataOutputHandler implementation instance registered for the data format...
Definition: DataIOManager.hpp:666
static InputHandlerIterator getInputHandlersBegin()
Returns an iterator pointing to the beginning of the list of registered Base::DataInputHandler implem...
Definition: DataIOManager.hpp:564
static OutputHandlerPointer getOutputHandlerByFormat(const DataFormat &fmt)
Returns a pointer to a Base::DataOutputHandler implementation instance registered for the specified d...
Definition: DataIOManager.hpp:655
InputHandlerType::SharedPointer InputHandlerPointer
Definition: DataIOManager.hpp:116
static InputHandlerPointer getInputHandlerByFileName(const std::string &file_name)
Returns a pointer to a Base::DataInputHandler implementation instance registered for the data format ...
Definition: DataIOManager.hpp:611
static InputHandlerIterator getInputHandlersEnd()
Returns an iterator pointing to the end of the list of registered Base::DataInputHandler implementati...
Definition: DataIOManager.hpp:570
A factory interface providing methods for the creation of Base::DataWriter instances handling a parti...
Definition: DataOutputHandler.hpp:54
std::shared_ptr< DataOutputHandler > SharedPointer
Definition: DataOutputHandler.hpp:59
Thrown to indicate that an index is out of range.
Definition: Base/Exceptions.hpp:152
Thrown to indicate that a value is out of range.
Definition: Base/Exceptions.hpp:114
The namespace of the Chemical Data Processing Library.