//=============================================================================
//! Component Class for Complex Double-precision Sparse Matrix Classes
class zcomponent
{
public:
  ///////////////////////////////////////////////
  /////////////////// objects ///////////////////
  ///////////////////////////////////////////////
  uint32_t i; //!< i index of the component
  uint32_t j; //!< j index of the component
  comple v; //!< value of the component
  
  ///////////////////////////////////////////////
  ///////////////// constructors ////////////////
  ///////////////////////////////////////////////
  inline zcomponent(){ ; }
  inline zcomponent(const uint32_t& _i, const uint32_t& _j, const comple& _v) :i(_i), j(_j), v(_v){ ; }
  
  ///////////////////////////////////////////////
  ////////////////// functions //////////////////
  ///////////////////////////////////////////////
  inline friend std::ostream& operator<<(std::ostream&, const zcomponent&);
};

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

//=============================================================================
inline std::ostream& operator<<(std::ostream& s, const zcomponent& c)
{VERBOSE_REPORT;
  s << "(" << c.i << ", " << c.j << ",  " << c.v << ")" << std::flush;
  return s;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

//=============================================================================
/*! lessthan function for i of zcomponent */
inline bool ilt(const zcomponent& a, const zcomponent& b)
{VERBOSE_REPORT;
  return a.i < b.i;
}

//=============================================================================
/*! lessthan function for j of zcomponent */
inline bool jlt(const zcomponent& a, const zcomponent& b)
{VERBOSE_REPORT;
  return a.j < b.j;
}
