Revision Log
*** empty log message ***
#ifndef _PAT_MATCH_H
#define _PAT_MATCH_H
#include <string>
#include <iostream>
#include "BitmapFont.h"
#include "Assumption.h"
#include <vector>
/* @ : 黒 */
/* . : 白 */
/* else(?) : どちらでも */
class PatMatch{
friend std::ostream& operator<<(std::ostream &os,const PatMatch &pm);
protected:
int width, height;
std::string pat;
Assumption assumption;
public:
PatMatch(int w,int h,std::string s,const Assumption &as)
:width(w), height(h), pat(s), assumption(as){
assert(pat.length() == (unsigned int)width*height);
}
PatMatch(int w,int h,std::string s, const SimpleAssumption &sa)
:width(w), height(h), pat(s), assumption(){
assumption.add(sa);
assert(pat.length() == (unsigned int)width*height);
}
int get(int x,int y) const{
return pat[y*width+x];
}
#if 0
bool isMatch(const BitmapFont& bf, int x, int y) const{
for(int i=0;i<width;i++)
for(int j=0;j<height;j++){
if(bf.get(x+i,y+j)){
if(get(i,j)=='.') return false;
}
else if(get(i,j)=='@') return false;
}
return true;
}
#endif
int matchPenalty(const BitmapFont& bf, int x, int y) const{
int penalty=0;
for(int i=0;i<width;i++)
for(int j=0;j<height;j++){
if(bf.get(x+i,y+j)){
if(get(i,j)=='.') return -1;
else if(get(i,j)=='*') penalty++;
}
else if(get(i,j)=='@') return -1;
}
return penalty;
}
std::vector<pixel> getPixels(int x, int y) const{
std::vector<pixel> pixels;
for(int i=0;i<width;i++)
for(int j=0;j<height;j++){
if(get(i,j)=='@'){
pixels.push_back(pixel(x+i,y+j));
}
}
return pixels;
}
};
std::ostream& operator<<(std::ostream &os,const PatMatch &pm){
return os << "PatMatch(width=" << pm.width << ",height=" << pm.height <<
",pat=" << pm.pat << "," << pm.assumption << ")";
}
#endif /* _PAT_MATCH_H */
|
ktanaka Powered by ViewCVS 1.0-dev |
ViewCVS and CVS Help |