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