NeighbourhoodOp(Dst, Src, Ext, Ext2, Ngb)
{
foreach d, s, e, e2 in Dst, Src, Ext, Ext2 {
Ngb.init(s.x, s.y, Src(s), Ext(e), Ext2(e2));
foreach n in Ngb.begin() .. Ngb.end()
Ngb.next(n.x, n.y, Src(s + n), Ext(e + n), Ext2(e2 + n));
Dst(d) = ngb.result();
}
}
The requirements on the NgbT template parameter expressed as class definition are:
template<class DstValT, class SrcValT, class ExtValT, class Ext2ValT>
class NgbT
{
public:
typedef HxTagCnum IteratorCategory;
typedef HxTag1Phase PhaseCategory;
typedef HxCnum CnumType;
NgbT(HxTagList& tags);
~NgbT();
HxSizes size();
CnumType begin();
CnumType end();
void init(int ix, int iy, SrcValT v1, ExtValT v2, Ext2ValT v3);
void next(int nx, int ny, SrcValT v1, ExtValT v2, Ext2ValT v3);
DstValT result() const;
static HxString className();
};
The Requirements on CnumType expressed as a class definition are:
class CnumType
{
public:
CnumType();
CnumType(const CnumType& rhs);
CnumType& operator=(const CnumType& rhs);
int x();
int y();
int z();
void inc();
bool operator!=(const CnumType& rhs);
};
Example(s):
1.2.12 written by Dimitri van Heesch,
© 1997-2001