#ifndef _MATCHERS_H #define _MATCHERS_H #include /* Matchters */ #include "PatMatch.h" #include "BitmapFont.h" class MatchResult { friend ostream& operator<<(ostream &os,const MatchResult &mr); protected: int x,y; PatMatch pm; public: MatchResult(int xx, int yy,PatMatch& p) :x(xx),y(yy),pm(p){} }; class Matchers { friend ostream& operator<<(ostream &os,const Matchers &mt); protected: vector pm; public: Matchers(){ pm.push_back(PatMatch(3,3, "..." ".@@" "...", Assumption() .add(SimpleAssumption(YokoMask,Start,1,1,0,0)) .add(SimpleAssumption(HidariMask,End,1,1,180,0)))); pm.push_back(PatMatch(3,3, "..." "@@@" "...", Assumption() .add(SimpleAssumption(YokoMask,Mid,1,1,0,0)) .add(SimpleAssumption(HidariMask,Mid,1,1,180,1)))); pm.push_back(PatMatch(4,3, "...." "@@@@" ".@@.", Assumption() .add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0)) .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,1,270,2)))); pm.push_back(PatMatch(5,4, "....?" ".@@.." "@@@@." ".....", SimpleAssumption(YokoMask,End,3,2,0,2))); pm.push_back(PatMatch(4,2, ".@@." ".@@.", SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,1,270,2))); pm.push_back(PatMatch(4,3, ".@@." "@@@@" ".@@.", Assumption() .add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0)) .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),Mid,1.5,1,270,2)))); pm.push_back(PatMatch(4,4, "...?" ".@.." ".@@@" ".@@.", Assumption() .add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0)) .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,2,270,2)))); pm.push_back(PatMatch(4,4, ".@@." ".@@@" ".@@." "....", Assumption() .add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0)) .add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2)))); pm.push_back(PatMatch(4,4, ".@@." "@@@." ".@@." "....", Assumption() .add(SimpleAssumption(YokoMask,JointEnd,1.5,2,0,0)) .add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2)))); } vector findMatch(const BitmapFont& bf){ vector mr; vector::iterator it; for(it=pm.begin();it!=pm.end();it++) for(int y= -1; yisMatch(bf,x,y)) mr.push_back(MatchResult(x,y,*it)); return mr; } bool coverCheck(const BitmapFont& bf){ vector mr=findMatch(bf); vector > pixel2match(bf.pixels.size()); vector > match2pixel(mr.size()); vector::iterator it; for(it=mr.begin();it!=mr.end();it++){ int n= it-mr-begin(); set ps; hogehoge match2pixel[n].swap(ps); } return true; } }; ostream& operator<<(ostream &os,const Matchers &mt){ os << "Matchers("; vector::const_iterator it; for(it=mt.pm.begin();it!=mt.pm.end();it++){ os << *it << ','; } os << ')'; return os; } ostream& operator<<(ostream &os,const MatchResult &mr){ os << "MatchResult(" << mr.x << "," << mr.y << "," << mr.pm << ")"; return os; } #endif /* _MATCHERS_H */