#ifndef _ASSUMPTION_H |
#ifndef _ASSUMPTION_H |
#define _ASSUMPTION_H |
#define _ASSUMPTION_H |
|
#include <vector> |
|
#include <iostream> |
|
|
enum PtypeMask{ |
enum PtypeMask{ |
TenMask=1<<0, |
TenMask=1<<0, |
YokoMask=1<<1, |
YokoMask=1<<1, |
TateMask=1<<2, |
TateMask=1<<2, |
|
HidariMask=1<<3, |
|
TatehaneMask=1<<4, |
|
TatehidariMask=1<<5, |
}; |
}; |
enum JointType{ |
enum JointType{ |
Start, |
Start, |
}; |
}; |
|
|
class SimpleAssumption{ |
class SimpleAssumption{ |
friend ostream& operator<<(ostream &os,const SimpleAssumption &sa); |
friend std::ostream& operator<<(std::ostream &os,const SimpleAssumption &sa); |
protected: |
protected: |
PtypeMask pmask; |
PtypeMask pmask; |
JointType jtype; |
JointType jtype; |
int x, y; |
double x, y; |
int angle; |
int angle; |
|
int hint; |
public: |
public: |
SimpleAssumption(PtypeMask pm, JointType jt,int xx,int yy, int a) |
SimpleAssumption(PtypeMask pm, JointType jt,double xx,double yy, int a,int h) |
:pmask(pm), jtype(jt), x(xx), y(yy), angle(a){} |
:pmask(pm), jtype(jt), x(xx), y(yy), angle(a), hint(h){} |
}; |
}; |
class AndAssumption{ |
class AndAssumption{ |
friend ostream& operator<<(ostream &os,const AndAssumption &aa); |
friend std::ostream& operator<<(std::ostream &os,const AndAssumption &aa); |
protected: |
protected: |
vector<SimpleAssumption> saList; |
std::vector<SimpleAssumption> saList; |
public: |
public: |
AndAssumption& add(const SimpleAssumption &sa){ |
AndAssumption& add(const SimpleAssumption &sa){ |
saList.push_back(sa); |
saList.push_back(sa); |
} |
} |
}; |
}; |
class Assumption{ |
class Assumption{ |
friend ostream& operator<<(ostream &os,const Assumption &as); |
friend std::ostream& operator<<(std::ostream &os,const Assumption &as); |
private: |
private: |
vector<AndAssumption> aaList; |
std::vector<AndAssumption> aaList; |
public: |
public: |
Assumption& add(const AndAssumption &sa){ |
Assumption& add(const AndAssumption &sa){ |
aaList.push_back(sa); |
aaList.push_back(sa); |
return *this; |
return *this; |
} |
} |
|
Assumption& add(const SimpleAssumption &sa){ |
|
aaList.push_back(AndAssumption().add(sa)); |
|
return *this; |
|
} |
}; |
}; |
ostream& operator<<(ostream &os,const SimpleAssumption &sa){ |
std::ostream& operator<<(std::ostream &os,const SimpleAssumption &sa){ |
os << "SimpleAssumption(pmask=" << (int)(sa.pmask) << ",jtype=" << (int)(sa.jtype) |
os << "SimpleAssumption(pmask=" << (int)(sa.pmask) << ",jtype=" << (int)(sa.jtype) |
<< ",x=" << sa.x << ",y=" << sa.y << ",angle=" << sa.angle << ")"; |
<< ",x=" << sa.x << ",y=" << sa.y << ",angle=" << sa.angle |
|
<< ",hint=" << sa.hint << ")"; |
return os; |
return os; |
} |
} |
ostream& operator<<(ostream &os,const AndAssumption &aa){ |
std::ostream& operator<<(std::ostream &os,const AndAssumption &aa){ |
vector<SimpleAssumption>::const_iterator it; |
std::vector<SimpleAssumption>::const_iterator it; |
|
if(aa.saList.size()==1){ |
|
return os << *(aa.saList.begin()); |
|
} |
os << "AndAssumption("; |
os << "AndAssumption("; |
for(it=aa.saList.begin(); it!=aa.saList.end(); it++){ |
for(it=aa.saList.begin(); it!=aa.saList.end(); it++){ |
os << *it << ' '; |
os << *it << ' '; |
os << ")"; |
os << ")"; |
return os; |
return os; |
} |
} |
ostream& operator<<(ostream &os,const Assumption &a){ |
std::ostream& operator<<(std::ostream &os,const Assumption &a){ |
vector<AndAssumption>::const_iterator it; |
std::vector<AndAssumption>::const_iterator it; |
|
if(a.aaList.size()==1){ |
|
return os << *(a.aaList.begin()); |
|
} |
os << "Assumption("; |
os << "Assumption("; |
for(it=a.aaList.begin(); it!=a.aaList.end(); it++){ |
for(it=a.aaList.begin(); it!=a.aaList.end(); it++){ |
os << *it << ' '; |
os << *it << ' '; |