or.hxx
Go to the documentation of this file.00001 #pragma once
00002 #ifndef OPENGM_OPERATION_OR_HXX
00003 #define OPENGM_OPERATION_OR_HXX
00004
00005 namespace opengm {
00006
00010 struct Or
00011 {
00013 template<class T>
00014 static T neutral()
00015 { return static_cast<T>(false); }
00016
00018 template<class T>
00019 static void neutral(T& out)
00020 { out = static_cast<T>(false); }
00021
00023 template<class T>
00024 static T ineutral()
00025 { return static_cast<T>(true); }
00026
00028 template<class T>
00029 static void ineutral(T& out)
00030 { out = static_cast<T>(true); }
00031
00033 template<class T1, class T2>
00034 static void op(const T1& in, T2& out)
00035 { out |= in; }
00036
00038 template<class T1,class T2,class T3>
00039 static void op(const T1& in1, const T2& in2, T3& out)
00040 { out = in1 | in2; }
00041 static void op(const bool& in1, const bool& in2, bool& out)
00042 { out = in1 || in2; }
00043
00045 static bool hasbop()
00046 { return true; }
00047
00049 template<class T>
00050 static bool bop(const T& in1, const T& in2)
00051 { return (in1 | in2); }
00052 static bool bop(const bool& in1, const bool& in2)
00053 { return (in1 || in2); }
00054
00056 template<class T>
00057 static bool ibop(const T& in1, const T& in2)
00058 { return !(in1 | in2); }
00059 static bool ibop(const bool& in1, const bool& in2)
00060 { return !(in1 || in2); }
00061 };
00062
00063 }
00064
00065 #endif // #ifndef OPENGM_OPERATION_OR_HXX