Listing 1: The Fisher function object class

class Fisher {
public:
  Fisher(const double alpha, const double beta)
    : alpha_(alpha), beta_(beta) {}

  template <class C>
  inline typename C::Element_t
  operator()(const C& c, int i, int j) const {
    return (     alpha_ * c.read(i+1,j  ) +
                 alpha_ * c.read(i  ,j+1) +
                 (1.0 + beta_ - 4*alpha_)* c.read(i  ,j  ) +
                 alpha_ * c.read(i  ,j-1) +
                 alpha_ * c.read(i-1,j  ) );
  }
  inline int lowerExtent(int) const { return 1; }
  inline int upperExtent(int) const { return 1; }

private:
  const double alpha_, beta_;
};
— End of Listing —