RTOp Package Browser (Single Doxygen Collection) Version of the Day
RTOpPack_RTOpServer.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // RTOp: Interfaces and Support Software for Vector Reduction Transformation
00005 //       Operations
00006 //                Copyright (2006) Sandia Corporation
00007 // 
00008 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00009 // license for use of this work by or on behalf of the U.S. Government.
00010 // 
00011 // This library is free software; you can redistribute it and/or modify
00012 // it under the terms of the GNU Lesser General Public License as
00013 // published by the Free Software Foundation; either version 2.1 of the
00014 // License, or (at your option) any later version.
00015 //  
00016 // This library is distributed in the hope that it will be useful, but
00017 // WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019 // Lesser General Public License for more details.
00020 //  
00021 // You should have received a copy of the GNU Lesser General Public
00022 // License along with this library; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00024 // USA
00025 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00026 // 
00027 // ***********************************************************************
00028 // @HEADER
00029 
00030 #ifndef RTOP_SERVER_HPP
00031 #define RTOP_SERVER_HPP
00032 
00033 //#include <typeinfo>
00034 //#include <ostream>
00035 //#include <iomanip>
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::RCP<Teuchos::AbstractFactory<RTOpPack::RTOpT<Scalar> > > &op_factory
00044   )
00045 {
00046   // ToDo: RAB: 20030620: Validate op_factory properly!
00047   op_factories_[op_factory->create()->op_name()] = op_factory;
00048 }
00049 
00050 template<class Scalar>
00051 Teuchos::RCP<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 << typeName(*itr->second->create()) << std::endl;
00073   }
00074   o << std::endl;
00075 }
00076 
00077 } // namespace RTOpPack
00078 
00079 #endif // RTOP_SERVER_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines