Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

Fuzzy.h

Go to the documentation of this file.
00001 // Fuzzy.h
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 2000-2002 Brown Deer Technology, LLC.    
00004 //                        All rights reserved.                   
00005 //////////////////////////////////////////////////////////////////////
00006 
00007 #ifndef FUZZY_H
00008 #define FUZZY_H
00009 
00010 #ifdef USE_STD
00011 #include <algorithm>
00012 #include <cmath>
00013 using namespace std;
00014 #else
00015 #include <algorithm.h>
00016 #include <math.h>
00017 #endif
00018 
00019 class Fuzzy {
00020    public:
00021       Fuzzy(const float value) { assign(value); }
00022       Fuzzy() { Fuzzy(0); }
00023       virtual ~Fuzzy() {} 
00024       Fuzzy& operator=( const float value );
00025       operator float() { return _value; }
00026       operator bool() { return IsTrue(); }
00027       operator int() { return IsTrue(); }
00028       Fuzzy operator~();
00029       Fuzzy operator&( Fuzzy& f);
00030       Fuzzy operator|( Fuzzy& f);
00031       Fuzzy operator^( Fuzzy& f);
00032       Fuzzy& operator&=( Fuzzy& f);
00033       Fuzzy& operator|=( Fuzzy& f);
00034       Fuzzy& operator^=( Fuzzy& f);
00035       virtual void assign( const float value );
00036       virtual bool IsTrue() { return ( _value >= 0.5 ); }
00037       virtual bool IsFalse() { return ( _value < 0.5 ); }
00038       virtual bool IsAmbiguous() { return 0; }
00039    protected:
00040       float _value;
00041 };
00042 
00043 inline Fuzzy& Fuzzy::operator=( const float value ) 
00044 { 
00045    assign(value); 
00046    return *this; 
00047 }
00048 
00049 inline Fuzzy Fuzzy::operator~() {
00050   Fuzzy ftmp;
00051   ftmp = 1.0 - float(*this);
00052   return ftmp;
00053 }
00054 
00055 inline Fuzzy Fuzzy::operator&( Fuzzy& f) {
00056    Fuzzy ftmp;
00057    ftmp = min( float(*this), float(f) );
00058    return ftmp;
00059 }
00060 
00061 inline Fuzzy Fuzzy::operator|( Fuzzy& f) {
00062    Fuzzy ftmp;
00063    ftmp = max( float(*this), float(f) );
00064    return ftmp;
00065 }
00066 
00067 inline Fuzzy Fuzzy::operator^( Fuzzy& f) {
00068    Fuzzy ftmp;
00069    ftmp = fabs( float(*this) - float(f) );
00070    return ftmp;
00071 }
00072 
00073 inline Fuzzy& Fuzzy::operator&=( Fuzzy& f) {
00074    _value = min( _value, float(f) );
00075    return *this;
00076 }
00077 
00078 inline Fuzzy& Fuzzy::operator|=( Fuzzy& f) {
00079    _value = max( _value, float(f) );
00080    return *this;
00081 }
00082 
00083 inline Fuzzy& Fuzzy::operator^=( Fuzzy& f) {
00084    _value = fabs( _value - float(f) );
00085    return *this;
00086 }
00087 
00088 inline void Fuzzy::assign( const float value) {
00089    if ( value < 0 ) _value = 0;
00090    else if ( value > 1 ) _value = 1;
00091    else _value = value;
00092 }
00093 
00094 #endif
00095 

Generated on Mon May 31 21:38:46 2004 for SR2k4 Assembler by doxygen 1.3.6