1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
#ifndef BOOL_OPS_H
#define BOOL_OPS_H
/*
* Functions to handle arithmetic operations on NumPy Bool values.
*/
#include <numpy/arrayobject.h>
/*
* A compiler time (ct) assert macro from
* http://www.pixelbeat.org/programming/gcc/static_assert.html
* This is used to assure that npy_bool_wrapper is the right size.
*/
#define ct_assert(e) extern char (*ct_assert(void)) [sizeof(char[1 - 2*!(e)])]
class npy_bool_wrapper {
private:
char value;
public:
/* operators */
operator char() const {
return value;
}
npy_bool_wrapper& operator=(const npy_bool_wrapper& x) {
value = x.value;
return (*this);
}
npy_bool_wrapper operator+(const npy_bool_wrapper& x) {
return value || x.value;
}
/* inplace operators */
npy_bool_wrapper operator+=(const npy_bool_wrapper& x) {
value = (value || x.value);
return (*this);
}
npy_bool_wrapper operator*=(const npy_bool_wrapper& x) {
value = (value && x.value);
return (*this);
}
/* constructors */
npy_bool_wrapper() {
value = 0;
}
template <class T>
npy_bool_wrapper(T x) {
value = (x != 0);
}
};
ct_assert(sizeof(char) == sizeof(npy_bool_wrapper));
#endif
|