|
AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects Version of the Day
|
00001 // ///////////////////////////////////////////////////// 00002 // VectorApplyOpSerialBase.cpp 00003 00004 #include "AbstractLinAlgPack_VectorApplyOpSerialBase.hpp" 00005 #include "AbstractLinAlgPack_apply_op_helper.hpp" 00006 00007 namespace AbstractLinAlgPack { 00008 00009 VectorApplyOpSerialBase::VectorApplyOpSerialBase() 00010 : in_apply_op_(false) 00011 {} 00012 00013 void VectorApplyOpSerialBase::apply_op_serial( 00014 const RTOpPack::RTOp& op 00015 ,const size_t num_vecs, const Vector* vecs[] 00016 ,const size_t num_targ_vecs, VectorMutable* targ_vecs[] 00017 ,RTOpPack::ReductTarget *reduct_obj 00018 ,const index_type first_ele, const index_type sub_dim, const index_type global_offset 00019 ) const 00020 { 00021 TEST_FOR_EXCEPTION( 00022 in_apply_op_, std::logic_error 00023 ,"VectorApplyOpSerialBase::apply_op_serial(...): Error, this function has been entered " 00024 "recursively which most likely means that the explicit sub-vector access methods Vector::get_sub_vector(...), " 00025 "Vector::free_sub_vector(...), VectorMutable::get_sub_vector(...), VectorMutable::commit_sub_vector(...) " 00026 "have not been overridden correctly on this concrete class \'" << typeName(*this) << "\' to not call " 00027 "apply_op(...) in there implemenations." 00028 ); 00029 in_apply_op_ = true; 00030 AbstractLinAlgPack::apply_op_serial( 00031 op,num_vecs,vecs,num_targ_vecs,targ_vecs,reduct_obj 00032 ,first_ele,sub_dim,global_offset 00033 ); 00034 in_apply_op_ = false; 00035 } 00036 00037 } // namespace AbstractLinAlgPack
1.7.4