blob: 438db99f945ab50bfc553542ef678ab3502837ac [file] [log] [blame]
#ifndef MADLIB_DENSE_LINEAR_SYSTEMS_STATES_
#define MADLIB_DENSE_LINEAR_SYSTEMS_STATES_
namespace madlib {
namespace modules {
namespace linear_systems {
using namespace dbal;
using namespace madlib::dbal::eigen_integration;
template <class Container>
class ResidualState: public DynamicStruct<ResidualState<Container>, Container>{
public:
typedef DynamicStruct<ResidualState, Container> Base;
MADLIB_DYNAMIC_STRUCT_TYPEDEFS;
ResidualState(Init_type& inInitialization);
void bind(ByteStream_type& inStream);
template <class OtherContainer> ResidualState& operator=(
const ResidualState<OtherContainer>& inOther);
uint64_type numRows;
uint16_type widthOfA;
double_type residual_norm;
double_type b_norm;
ColumnVector_type solution;
};
// ------------------------------------------------------------------------
template <class Container>
inline ResidualState<Container>::ResidualState (Init_type& inInitialization) :
Base(inInitialization){
this->initialize();
}
// ------------------------------------------------------------------------
template <class Container>
inline void ResidualState<Container>::bind(ByteStream_type& inStream){
inStream >> numRows
>> widthOfA
>> residual_norm
>> b_norm;
uint16_t actualWidthOfA = widthOfA.isNull() ? static_cast<uint16_t>(0) : static_cast<uint16_t>(widthOfA);
inStream >> solution.rebind(actualWidthOfA);
}
// ------------------------------------------------------------------------
template <class Container>
template <class OtherContainer>
inline ResidualState<Container>& ResidualState<Container>::operator= (
const ResidualState<OtherContainer>& inOther){
this->copy(inOther);
return *this;
}
} //
} //
} //
#endif