// Emacs -*- C++ -*-

// Machine generated include file, do not modify.

//prefix
//filename BIO-cvcomplex.c
// conversion I(complex) I(IA_Bit)
//unary pointwise to_complex subop=complex I(complex) I(IA_Bit)
IA_Image<IA_Point<int>,complex> to_complex(const IA_Image<IA_Point<int>,IA_Bit> & rhs);

//filename BIO-cvfloat.c
// conversion I(float) I(IA_Bit)
//unary pointwise to_float subop= I(float) I(IA_Bit)
IA_Image<IA_Point<int>,float> to_float(const IA_Image<IA_Point<int>,IA_Bit> & rhs);

//filename BIO-cvint.c
// conversion I(int) I(IA_Bit)
//unary pointwise to_int subop= I(int) I(IA_Bit)
IA_Image<IA_Point<int>,int> to_int(const IA_Image<IA_Point<int>,IA_Bit> & rhs);

//filename BIO-u_char.c
// conversion I(u_char) I(IA_Bit)
//unary pointwise to_uchar subop= I(u_char) I(IA_Bit)
IA_Image<IA_Point<int>,u_char> to_uchar(const IA_Image<IA_Point<int>,IA_Bit> & rhs);

//  Binary operations for the Bit Discrete Image
//filename BIO-__ad.c
//binary pointwise commutative operator& I(IA_Bit) I(IA_Bit) I(IA_Bit)
IA_Image<IA_Point<int>,IA_Bit> operator&(const IA_Image<IA_Point<int>,IA_Bit> &,const IA_Image<IA_Point<int>,IA_Bit> &);

//binary pointwise commutative operator& I(IA_Bit) I(IA_Bit) IA_Bit
IA_Image<IA_Point<int>,IA_Bit> operator&(const IA_Image<IA_Point<int>,IA_Bit> &,IA_Bit);
inline IA_Image<IA_Point<int>,IA_Bit> operator&(IA_Bit lhs,const IA_Image<IA_Point<int>,IA_Bit> & rhs) {
    return rhs&lhs;
}

//pointwise operator&= I(IA_Bit) I(IA_Bit)
inline IA_Image<IA_Point<int>,IA_Bit> & operator&=(IA_Image<IA_Point<int>,IA_Bit>& lhs, const IA_Image<IA_Point<int>,IA_Bit> & rhs) {
    return lhs = lhs & rhs;
}

//pointwise operator&= I(IA_Bit) IA_Bit
inline IA_Image<IA_Point<int>,IA_Bit> & operator&=(IA_Image<IA_Point<int>,IA_Bit>& lhs, IA_Bit rhs) {
    return lhs = lhs & rhs;
}

//filename BIO-__or.c
//binary pointwise commutative operator| I(IA_Bit) I(IA_Bit) I(IA_Bit)
IA_Image<IA_Point<int>,IA_Bit> operator|(const IA_Image<IA_Point<int>,IA_Bit> &,const IA_Image<IA_Point<int>,IA_Bit> &);

//binary pointwise commutative operator| I(IA_Bit) I(IA_Bit) IA_Bit
IA_Image<IA_Point<int>,IA_Bit> operator|(const IA_Image<IA_Point<int>,IA_Bit> &,IA_Bit);
inline IA_Image<IA_Point<int>,IA_Bit> operator|(IA_Bit lhs,const IA_Image<IA_Point<int>,IA_Bit> & rhs) {
    return rhs|lhs;
}

//pointwise operator|= I(IA_Bit) I(IA_Bit)
inline IA_Image<IA_Point<int>,IA_Bit> & operator|=(IA_Image<IA_Point<int>,IA_Bit>& lhs, const IA_Image<IA_Point<int>,IA_Bit> & rhs) {
    return lhs = lhs | rhs;
}

//pointwise operator|= I(IA_Bit) IA_Bit
inline IA_Image<IA_Point<int>,IA_Bit> & operator|=(IA_Image<IA_Point<int>,IA_Bit>& lhs, IA_Bit rhs) {
    return lhs = lhs | rhs;
}

//filename BIO-__er.c
//binary pointwise commutative operator^ I(IA_Bit) I(IA_Bit) I(IA_Bit)
IA_Image<IA_Point<int>,IA_Bit> operator^(const IA_Image<IA_Point<int>,IA_Bit> &,const IA_Image<IA_Point<int>,IA_Bit> &);

//binary pointwise commutative operator^ I(IA_Bit) I(IA_Bit) IA_Bit
IA_Image<IA_Point<int>,IA_Bit> operator^(const IA_Image<IA_Point<int>,IA_Bit> &,IA_Bit);
inline IA_Image<IA_Point<int>,IA_Bit> operator^(IA_Bit lhs,const IA_Image<IA_Point<int>,IA_Bit> & rhs) {
    return rhs^lhs;
}

//pointwise operator^= I(IA_Bit) I(IA_Bit)
inline IA_Image<IA_Point<int>,IA_Bit> & operator^=(IA_Image<IA_Point<int>,IA_Bit>& lhs, const IA_Image<IA_Point<int>,IA_Bit> & rhs) {
    return lhs = lhs ^ rhs;
}

//pointwise operator^= I(IA_Bit) IA_Bit
inline IA_Image<IA_Point<int>,IA_Bit> & operator^=(IA_Image<IA_Point<int>,IA_Bit>& lhs, IA_Bit rhs) {
    return lhs = lhs ^ rhs;
}

//filename BIO-__nt.c
//unary pointwise operator~ subop=operator! I(IA_Bit) I(IA_Bit)
IA_Image<IA_Point<int>,IA_Bit> operator~(const IA_Image<IA_Point<int>,IA_Bit> & rhs);

//unary pointwise operator! I(IA_Bit) I(IA_Bit)
IA_Image<IA_Point<int>,IA_Bit> operator!(const IA_Image<IA_Point<int>,IA_Bit> & rhs);

//filename BIO-__eq.c
//binary strictrel commutative operator== int I(IA_Bit) I(IA_Bit)
int operator==(const IA_Image<IA_Point<int>,IA_Bit> &,const IA_Image<IA_Point<int>,IA_Bit> &);

//binary strictrel commutative operator== int I(IA_Bit) IA_Bit
int operator==(const IA_Image<IA_Point<int>,IA_Bit> &,IA_Bit);
inline int operator==(IA_Bit lhs,const IA_Image<IA_Point<int>,IA_Bit> & rhs) {
    return rhs==lhs;
}

//filename BIO-strict_ne.c
//binary strictrel commutative strict_ne subop=operator!= int I(IA_Bit) I(IA_Bit)
int strict_ne(const IA_Image<IA_Point<int>,IA_Bit> &,const IA_Image<IA_Point<int>,IA_Bit> &);

//binary strictrel commutative strict_ne subop=operator!= int I(IA_Bit) IA_Bit
int strict_ne(const IA_Image<IA_Point<int>,IA_Bit> &,IA_Bit);
inline int strict_ne(IA_Bit lhs,const IA_Image<IA_Point<int>,IA_Bit> & rhs) {
    return strict_ne(rhs,lhs);
}

//filename BIO-reductions.c
//reduction sum subop=operator+ zero=0 int I(IA_Bit)
int sum(const IA_Image<IA_Point<int>,IA_Bit> &);

