#ifndef LIBA_FUZZY_H
#define LIBA_FUZZY_H
#include "a.h"
#if defined(__cplusplus)
extern "C" {
#endif
#if defined(LIBA_FUZZY_C)
#undef A_INTERN
#define A_INTERN A_INLINE
#endif
#if !defined A_HAVE_INLINE || defined(LIBA_FUZZY_C)
A_EXTERN a_float a_fuzzy_not(a_float x);
#endif
#if defined(A_HAVE_INLINE) || defined(LIBA_FUZZY_C)
A_INTERN a_float a_fuzzy_not(a_float x) { return 1 - x; }
#endif
#if !defined A_HAVE_INLINE || defined(LIBA_FUZZY_C)
A_EXTERN a_float a_fuzzy_cap(a_float a, a_float b);
#endif
#if defined(A_HAVE_INLINE) || defined(LIBA_FUZZY_C)
A_INTERN a_float a_fuzzy_cap(a_float a, a_float b) { return A_MIN(a, b); }
#endif
#if !defined A_HAVE_INLINE || defined(LIBA_FUZZY_C)
A_EXTERN a_float a_fuzzy_cap_algebra(a_float a, a_float b);
#endif
#if defined(A_HAVE_INLINE) || defined(LIBA_FUZZY_C)
A_INTERN a_float a_fuzzy_cap_algebra(a_float a, a_float b) { return a * b; }
#endif
#if !defined A_HAVE_INLINE || defined(LIBA_FUZZY_C)
A_EXTERN a_float a_fuzzy_cap_bounded(a_float a, a_float b);
#endif
#if defined(A_HAVE_INLINE) || defined(LIBA_FUZZY_C)
A_INTERN a_float a_fuzzy_cap_bounded(a_float a, a_float b)
{
a_float const c = a + b - 1;
return A_MAX(c, 0);
}
#endif
#if !defined A_HAVE_INLINE || defined(LIBA_FUZZY_C)
A_EXTERN a_float a_fuzzy_cup(a_float a, a_float b);
#endif
#if defined(A_HAVE_INLINE) || defined(LIBA_FUZZY_C)
A_INTERN a_float a_fuzzy_cup(a_float a, a_float b) { return A_MAX(a, b); }
#endif
#if !defined A_HAVE_INLINE || defined(LIBA_FUZZY_C)
A_EXTERN a_float a_fuzzy_cup_algebra(a_float a, a_float b);
#endif
#if defined(A_HAVE_INLINE) || defined(LIBA_FUZZY_C)
A_INTERN a_float a_fuzzy_cup_algebra(a_float a, a_float b) { return a + b - a * b; }
#endif
#if !defined A_HAVE_INLINE || defined(LIBA_FUZZY_C)
A_EXTERN a_float a_fuzzy_cup_bounded(a_float a, a_float b);
#endif
#if defined(A_HAVE_INLINE) || defined(LIBA_FUZZY_C)
A_INTERN a_float a_fuzzy_cup_bounded(a_float a, a_float b)
{
a_float const c = a + b;
return A_MIN(c, 1);
}
#endif
A_EXTERN a_float a_fuzzy_equ(a_float a, a_float b);
A_EXTERN a_float a_fuzzy_equ_(a_float gamma, a_float a, a_float b);
#if defined(LIBA_FUZZY_C)
#undef A_INTERN
#define A_INTERN static A_INLINE
#endif
#if defined(__cplusplus)
}
#endif
#endif