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>
134 typedef std::vector<InputHandlerPointer> InputHandlerList;
135 typedef std::vector<OutputHandlerPointer> OutputHandlerList;
374 static DataIOManager& getInstance();
376 InputHandlerList inputHandlers;
377 OutputHandlerList outputHandlers;
383 # define _CDPL_BASE_API
385 # define _CDPL_BASE_API CDPL_BASE_API
388 extern template class _CDPL_BASE_API DataIOManager<Chem::Molecule>;
390 extern template class _CDPL_BASE_API DataIOManager<Chem::MolecularGraph>;
392 extern template class _CDPL_BASE_API DataIOManager<Chem::Reaction>;
394 extern template class _CDPL_BASE_API DataIOManager<Pharm::Pharmacophore>;
396 extern template class _CDPL_BASE_API DataIOManager<Pharm::FeatureContainer>;
398 extern template class _CDPL_BASE_API DataIOManager<Grid::RegularGrid<double, double> >;
400 extern template class _CDPL_BASE_API DataIOManager<Grid::RegularGridSet<double, double> >;
402 extern template class _CDPL_BASE_API DataIOManager<Vis::Object3D>;
404 #undef _CDPL_BASE_API
413 template <
typename T>
416 static DataIOManager<T> instance;
421 template <
typename T>
424 getInstance().inputHandlers.push_back(handler);
427 template <
typename T>
430 getInstance().outputHandlers.push_back(handler);
433 template <
typename T>
436 InputHandlerList& handlers = getInstance().inputHandlers;
438 typename InputHandlerList::iterator it = std::find_if(handlers.begin(), handlers.end(),
439 std::bind(std::equal_to<DataFormat>(), std::ref(fmt),
441 if (it != handlers.end()) {
449 template <
typename T>
452 OutputHandlerList& handlers = getInstance().outputHandlers;
454 typename OutputHandlerList::iterator it = std::find_if(handlers.begin(), handlers.end(),
455 std::bind(std::equal_to<DataFormat>(), std::ref(fmt),
457 if (it != handlers.end()) {
465 template <
typename T>
468 InputHandlerList& handlers = getInstance().inputHandlers;
470 typename InputHandlerList::iterator it = std::find(handlers.begin(), handlers.end(), handler);
472 if (it != handlers.end()) {
480 template <
typename T>
483 OutputHandlerList& handlers = getInstance().outputHandlers;
485 typename OutputHandlerList::iterator it = std::find(handlers.begin(), handlers.end(), handler);
487 if (it != handlers.end()) {
495 template <
typename T>
498 InputHandlerList& handlers = getInstance().inputHandlers;
500 if (idx >= handlers.size())
501 throw IndexError(
"DataIOManager: handler index out of bounds");
503 handlers.erase(handlers.begin() + idx);
506 template <
typename T>
509 using namespace std::placeholders;
511 OutputHandlerList& handlers = getInstance().outputHandlers;
513 if (idx >= handlers.size())
514 throw IndexError(
"DataIOManager: handler index out of bounds");
516 handlers.erase(handlers.begin() + idx);
519 template <
typename T>
523 InputHandlerList& handlers = getInstance().inputHandlers;
525 if (it < handlers.begin() || it >= handlers.end())
526 throw RangeError(
"DataIOManager: input-handler iterator out of valid range");
528 return handlers.erase(it);
531 template <
typename T>
535 OutputHandlerList& handlers = getInstance().outputHandlers;
537 if (it < handlers.begin() || it >= handlers.end())
538 throw RangeError(
"DataIOManager: output-handler iterator out of valid range");
540 return handlers.erase(it);
543 template <
typename T>
546 return getInstance().inputHandlers.size();
549 template <
typename T>
552 return getInstance().outputHandlers.size();
555 template <
typename T>
558 const InputHandlerList& handlers = getInstance().inputHandlers;
560 if (idx >= handlers.size())
561 throw IndexError(
"DataIOManager: handler index out of bounds");
563 return handlers[idx];
566 template <
typename T>
569 const OutputHandlerList& handlers = getInstance().outputHandlers;
571 if (idx >= handlers.size())
572 throw IndexError(
"DataIOManager: handler index out of bounds");
574 return handlers[idx];
577 template <
typename T>
580 return getInstance().inputHandlers.begin();
583 template <
typename T>
586 return getInstance().inputHandlers.end();
589 template <
typename T>
592 return getInstance().outputHandlers.begin();
595 template <
typename T>
598 return getInstance().outputHandlers.end();
601 template <
typename T>
604 const InputHandlerList& handlers = getInstance().inputHandlers;
606 typename InputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
607 std::bind(std::equal_to<DataFormat>(), std::ref(fmt),
612 template <
typename T>
615 const InputHandlerList& handlers = getInstance().inputHandlers;
617 typename InputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
618 std::bind(&DataFormat::matchesFileExtension,
620 std::ref(file_ext)));
624 template <
typename T>
627 auto& handlers = getInstance().inputHandlers;
628 std::string file_ext;
630 for (std::string::size_type i = file_name.find_first_of(
'.', 0); i != std::string::npos; i = file_name.find_first_of(
'.', i)) {
631 file_ext = file_name.substr(++i);
633 auto it = std::find_if(handlers.begin(), handlers.end(), [&](
const InputHandlerPointer& handler) {
634 return handler->getDataFormat().matchesFileExtension(file_ext);
637 if (it != handlers.end())
644 template <
typename T>
647 const InputHandlerList& handlers = getInstance().inputHandlers;
649 typename InputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
650 std::bind(&DataFormat::matchesName,
656 template <
typename T>
659 const InputHandlerList& handlers = getInstance().inputHandlers;
661 typename InputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
662 std::bind(&DataFormat::matchesMimeType,
664 std::ref(mime_type)));
668 template <
typename T>
671 const OutputHandlerList& handlers = getInstance().outputHandlers;
673 typename OutputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
674 std::bind(std::equal_to<DataFormat>(), std::ref(fmt),
679 template <
typename T>
682 const OutputHandlerList& handlers = getInstance().outputHandlers;
684 typename OutputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
685 std::bind(&DataFormat::matchesName,
691 template <
typename T>
694 const OutputHandlerList& handlers = getInstance().outputHandlers;
696 typename OutputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
697 std::bind(&DataFormat::matchesFileExtension,
699 std::ref(file_ext)));
703 template <
typename T>
706 auto& handlers = getInstance().outputHandlers;
707 std::string file_ext;
709 for (std::string::size_type i = file_name.find_first_of(
'.', 0); i != std::string::npos; i = file_name.find_first_of(
'.', i)) {
710 file_ext = file_name.substr(++i);
712 auto it = std::find_if(handlers.begin(), handlers.end(), [&](
const OutputHandlerPointer& handler) {
713 return handler->getDataFormat().matchesFileExtension(file_ext);
716 if (it != handlers.end())
723 template <
typename T>
726 const OutputHandlerList& handlers = getInstance().outputHandlers;
728 typename OutputHandlerList::const_iterator it = std::find_if(handlers.begin(), handlers.end(),
729 std::bind(&DataFormat::matchesMimeType,
731 std::ref(mime_type)));
Definition of the preprocessor macro CDPL_BASE_API.
Definition of exception classes.
Definition of class CDPL::Base::DataOutputHandler.
Singleton class that serves as a global registry for Base::DataInputHandler and Base::DataOutputHandl...
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:724
static InputHandlerPointer getInputHandlerByName(const std::string &name)
Returns a pointer to a Base::DataInputHandler implementation instance registered for the data format ...
Definition: DataIOManager.hpp:645
static void registerInputHandler(const InputHandlerPointer &handler)
Registers the specified Base::DataInputHandler implementation instance.
Definition: DataIOManager.hpp:422
OutputHandlerList::iterator OutputHandlerIterator
An iterator used to iterate over the list of registered output handlers.
Definition: DataIOManager.hpp:146
static std::size_t getNumOutputHandlers()
Returns the number of registered Base::DataOutputHandler implementation instances.
Definition: DataIOManager.hpp:550
DataInputHandler< T > InputHandlerType
The type of the registered input handler instances.
Definition: DataIOManager.hpp:116
static InputHandlerPointer getInputHandlerByFormat(const DataFormat &fmt)
Returns a pointer to a Base::DataInputHandler implementation instance registered for the specified da...
Definition: DataIOManager.hpp:602
static OutputHandlerIterator getOutputHandlersEnd()
Returns an iterator pointing to the end of the list of registered Base::DataOutputHandler implementat...
Definition: DataIOManager.hpp:596
static OutputHandlerIterator getOutputHandlersBegin()
Returns an iterator pointing to the beginning of the list of registered Base::DataOutputHandler imple...
Definition: DataIOManager.hpp:590
static bool unregisterInputHandler(const DataFormat &fmt)
Unregisters the Base::DataInputHandler implementation instance for the specified data format.
Definition: DataIOManager.hpp:434
static void registerOutputHandler(const OutputHandlerPointer &handler)
Registers the specified Base::DataOutputHandler implementation instance.
Definition: DataIOManager.hpp:428
static const InputHandlerPointer & getInputHandler(std::size_t idx)
Returns a reference to the registered Base::DataInputHandler implementation instance with the specifi...
Definition: DataIOManager.hpp:556
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:704
OutputHandlerType::SharedPointer OutputHandlerPointer
A reference-counted smart pointer to a registered output handler instance.
Definition: DataIOManager.hpp:131
InputHandlerList::iterator InputHandlerIterator
An iterator used to iterate over the list of registered input handlers.
Definition: DataIOManager.hpp:141
static std::size_t getNumInputHandlers()
Returns the number of registered Base::DataInputHandler implementation instances.
Definition: DataIOManager.hpp:544
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:692
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:657
DataOutputHandler< T > OutputHandlerType
The type of the registered output handler instances.
Definition: DataIOManager.hpp:121
static bool unregisterOutputHandler(const DataFormat &fmt)
Unregisters the Base::DataOutputHandler implementation instance for the specified data format.
Definition: DataIOManager.hpp:450
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:613
static const OutputHandlerPointer & getOutputHandler(std::size_t idx)
Returns a reference to the registered Base::DataOutputHandler implementation instance with the specif...
Definition: DataIOManager.hpp:567
static OutputHandlerPointer getOutputHandlerByName(const std::string &name)
Returns a pointer to a Base::DataOutputHandler implementation instance registered for the data format...
Definition: DataIOManager.hpp:680
static InputHandlerIterator getInputHandlersBegin()
Returns an iterator pointing to the beginning of the list of registered Base::DataInputHandler implem...
Definition: DataIOManager.hpp:578
static OutputHandlerPointer getOutputHandlerByFormat(const DataFormat &fmt)
Returns a pointer to a Base::DataOutputHandler implementation instance registered for the specified d...
Definition: DataIOManager.hpp:669
InputHandlerType::SharedPointer InputHandlerPointer
A reference-counted smart pointer to a registered input handler instance.
Definition: DataIOManager.hpp:126
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:625
static InputHandlerIterator getInputHandlersEnd()
Returns an iterator pointing to the end of the list of registered Base::DataInputHandler implementati...
Definition: DataIOManager.hpp:584
Factory interface providing methods for the creation of Base::DataWriter instances handling a particu...
Definition: DataOutputHandler.hpp:54
std::shared_ptr< DataOutputHandler > SharedPointer
A reference-counted smart pointer [SHPTR] for dynamically allocated DataOutputHandler instances.
Definition: DataOutputHandler.hpp:65
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.