#ifndef IO_PATTERNS_H
#define IO_PATTERNS_H
#include <vector>
#include <string>
class Pattern {public:
int size() const { return p.size(); } int na() const { return nactive; } bool operator[](int i) const { return p[i]; } const std::vector<bool>& operator()() const { return p; }
Pattern() : nactive(0) {} Pattern(int n, int a) throw (std::string); Pattern(const std::string&) throw (std::string); Pattern(const Pattern& pat) : p(pat.p), nactive(pat.nactive) {} Pattern& operator=(const Pattern& pat) { if (&pat != this) { p = pat.p; nactive = pat.nactive; }
return *this;
}
~Pattern() {}
private:
std::vector<bool> p; int nactive;};
class Relation {public:
Pattern input;
Pattern output;
int id() const { return number; }
Relation(int index = 0) : number(index) {} Relation(int index, const Pattern& in, const Pattern& out) :
input(in), output(out), number(index) {} Relation(int index, int ni, int no, int nai, int nao) :
input(ni, nai), output(no, nao), number(index) {} Relation(int index, const std::string& in, const std::string& out) :
input(in), output(out), number(index) {}
Relation(const Relation& r) : input(r.input), output(r.output), number(r.number) {}
Relation& operator=(const Relation& r) { if (&r != this) { input = r.input; output = r.output; number = r.number; }
return *this;
}
~Relation() {}
private:
int number;};
class RelationSet {public:
int size() const { return p.size(); } double ai() const { return ainput; } double ao() const { return aoutput; } void shuffle(); const Relation& operator[](int i) const { return p[i]; }
RelationSet() : ainput(0.), aoutput(0.) {} RelationSet(int nio, int ni, int no, int nai, int nao) throw (std::string); RelationSet(const std::string& patternfile) throw (std::string);
RelationSet(const RelationSet& r) : p(r.p), ainput(r.ainput), aoutput(r.aoutput) {}
RelationSet& operator=(const RelationSet& r) { if (&r != this) { p = r.p; ainput = r.ainput; aoutput = r.aoutput; }
return *this;
}
~RelationSet() {}
private:
std::vector<Relation> p;
double ainput; double aoutput;};
#endif // IO_PATTERNS_H