home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_11_11
/
janzen
/
fzy_set.hpp
< prev
next >
Wrap
C/C++ Source or Header
|
1993-09-01
|
5KB
|
216 lines
EXAMPLE TWO (2):
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
class fzy_set
{
private:
int dimension;
fuzzy *fzy_data;
public:
fzy_set(const int);
fzy_set(const fzy_set&);
~fzy_set(void);
fzy_set& operator=(const fzy_set&);
fuzzy& operator[](const int len);
fuzzy& operator[](const int len) const;
friend int operator<(const fzy_set&,
const fzy_set&);
friend int operator<=(const fzy_set&,
const fzy_set&);
friend int operator==(const fzy_set&,
const fzy_set&);
friend int operator>=(const fzy_set&,
const fzy_set&);
friend int operator>(const fzy_set&,
const fzy_set&);
friend int operator!=(const fzy_set&,
const fzy_set&);
friend ostream& operator<<(ostream& s,
fzy_set& z);
friend fuzzy fzy_set_max(const fzy_set&);
friend fzy_set operator*(const fzy_set&,
const class fam_2&);
};
fzy_set::fzy_set(const int size = 1) // constructor
{
dimension = ((size >= 0) ? size : 1);
fzy_data = new fuzzy[dimension];
return;
}
fzy_set::fzy_set(const fzy_set& fzy_set_in)
{
fzy_data = new fuzzy[dimension
= fzy_set_in.dimension];
memcpy(fzy_data, fzy_set_in.fzy_data,
dimension * sizeof (fuzzy));
return;
}
fzy_set::~fzy_set(void)
{
delete[] fzy_data;
return;
}
fzy_set& fzy_set::operator=(const fzy_set& r_value)
{
if (this != &r_value)
{
delete[] fzy_data;
fzy_data = new fuzzy(r_value.dimension);
memcpy(fzy_data, r_value.fzy_data,
r_value.dimension
* sizeof(fuzzy));
}
return *this;
}
fuzzy& fzy_set::operator[](const int len)
{
return ((len >= 0) && (len <= dimension)) ?
fzy_data[len] : fzy_data[0];
}
fuzzy& fzy_set::operator[](const int len) const
{
return ((len >= 0) && (len <= dimension)) ?
fzy_data[len] : fzy_data[0];
}
int operator<(const fzy_set& value_a,
const fzy_set& value_b)
{
auto int result = 0,
ctr = 0;
if (value_a.dimension == value_b.dimension)
{
while ((result = (value_a[ctr] < value_b[ctr]))
&& (ctr < value_a.dimension))
{
ctr++;
}
}
return result;
}
int operator<=(const fzy_set& value_a,
const fzy_set& value_b)
{
auto int result = 0,
ctr = 0;
if (value_a.dimension == value_b.dimension)
{
while ((result = (value_a[ctr]
<= value_b[ctr]))
&& (ctr < value_a.dimension))
{
ctr++;
}
}
return result;
}
int operator==(const fzy_set& value_a,
const fzy_set& value_b)
{
auto int result = 0,
ctr = 0;
if (value_a.dimension == value_b.dimension)
{
while ((result = (value_a[ctr]
== value_b[ctr]))
&& (ctr < value_a.dimension))
{
ctr++;
}
}
return result;
}
int operator>=(const fzy_set& value_a,
const fzy_set& value_b)
{
auto int result = 0,
ctr = 0;
if (value_a.dimension == value_b.dimension)
{
while ((result
= (value_a[ctr] >= value_b[ctr]))
&& (ctr < value_a.dimension))
{
ctr++;
}
}
return result;
}
int operator>(const fzy_set& value_a,
const fzy_set& value_b)
{
auto int result = 0,
ctr = 0;
if (value_a.dimension == value_b.dimension)
{
while ((result = (value_a[ctr] > value_b[ctr]))
&& (ctr < value_a.dimension))
{
ctr++;
}
}
return result;
}
int operator!=(const fzy_set& value_a,
const fzy_set& value_b)
{
auto int result = 0,
ctr = 0;
if (value_a.dimension == value_b.dimension)
{
while ((result =
(value_a[ctr] == value_b[ctr]))
&& (ctr < value_a.dimension))
{
ctr++;
}
}
return !result;
}
ostream& operator<<(ostream& s, fzy_set& z)
{
static int ctr;
s << "(";
fuzzy *set = z.fzy_data;
int ind = z.dimension - 1;
for (ctr = 0; ctr < ind; ctr++)
{
s << *set++ << " ";
}
return s << *set << ")\n";
}
fuzzy fzy_set_max(const fzy_set& set)
{
auto fuzzy tmp_fuzzy(0.0);
for (int i = 0; i < set.dimension; i++)
{
tmp_fuzzy |= set[i];
}
return tmp_fuzzy;
}