00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef RTOP_SERVER_HPP
00030 #define RTOP_SERVER_HPP
00031
00032
00033
00034
00035
00036 #include "RTOpPack_RTOpServerDecl.hpp"
00037
00038 namespace RTOpPack {
00039
00040 template<class Scalar>
00041 void RTOpServer<Scalar>::add_op_factory(
00042 const Teuchos::RefCountPtr<Teuchos::AbstractFactory<RTOpPack::RTOpT<Scalar> > > &op_factory
00043 )
00044 {
00045
00046 op_factories_[op_factory->create()->op_name()] = op_factory;
00047 }
00048
00049 template<class Scalar>
00050 Teuchos::RefCountPtr<Teuchos::AbstractFactory<RTOpPack::RTOpT<Scalar> > >
00051 RTOpServer<Scalar>::get_op_factory( const char op_name[] ) const
00052 {
00053 typename op_factories_t::const_iterator itr = op_factories_.find(op_name);
00054 TEST_FOR_EXCEPTION(
00055 itr == op_factories_.end(), std::logic_error
00056 ,"RTOpServer<Scalar>::get_op_factory(...): Error, an operator factory with the "
00057 "operator name \'" << op_name << "\' does not exist!"
00058 );
00059 return itr->second;
00060 }
00061
00062 template<class Scalar>
00063 void RTOpServer<Scalar>::print_op_factories(std::ostream& o) const
00064 {
00065 using std::setw;
00066 const int w = 30;
00067 o << "\nRTOpServer<Scalar>::print_op_factories(...): RTOp operator factories currently registered\n\n" << std::left;
00068 o << setw(w) << "Operator name" << "Operator type" << std::endl;
00069 o << setw(w) << "-------------" << "-------------" << std::endl;
00070 for( typename op_factories_t::const_iterator itr = op_factories_.begin(); itr != op_factories_.end(); ++itr ) {
00071 o << setw(w) << itr->first << typeid(*itr->second->create()).name() << std::endl;
00072 }
00073 o << std::endl;
00074 }
00075
00076 }
00077
00078 #endif // RTOP_SERVER_HPP