[wadalabfont-kit] / jis2prim / PatMatch.h  

Diff of /jis2prim/PatMatch.h

Parent Directory | Revision Log

version 1.3, Tue Mar 19 00:33:14 2002 UTC version 1.5, Tue Aug 20 11:10:37 2002 UTC
Line 2 
Line 2 
 #define  _PAT_MATCH_H  #define  _PAT_MATCH_H
   
 #include <string>  #include <string>
   #include <iostream>
 #include "BitmapFont.h"  #include "BitmapFont.h"
 #include "Assumption.h"  #include "Assumption.h"
   #include <vector>
   
 /* @ : 黒 */  /* @ : 黒 */
 /* . : 白 */  /* . : 白 */
 /* else(?) : どちらでも */  /* else(?) : どちらでも */
 class PatMatch{  class PatMatch{
   friend ostream& operator<<(ostream &os,const PatMatch &pm);    friend std::ostream& operator<<(std::ostream &os,const PatMatch &pm);
  protected:   protected:
   int width, height;    int width, height;
   string pat;    std::string pat;
   Assumption assumption;    Assumption assumption;
  public:   public:
   PatMatch(int w,int h,string s,const Assumption &as)    PatMatch(int w,int h,std::string s,const Assumption &as);
     :width(w), height(h), pat(s), assumption(as){    PatMatch(int w,int h,std::string s, const SimpleAssumption &sa);
     assert(pat.length() == (unsigned int)width*height);    int get(int x,int y) const;
   }  #if 0
   PatMatch(int w,int h,string s, const SimpleAssumption &sa)    bool isMatch(const BitmapFont& bf, int x, int y) const;
     :width(w), height(h), pat(s), assumption(){  #endif
     assumption.add(sa);    int matchPenalty(const BitmapFont& bf, int x, int y) const;
     assert(pat.length() == (unsigned int)width*height);    std::vector<pixel> getPixels(int x, int y) const;
   }  
   int get(int x,int y) const{  
     return pat[y*width+x];  
   }  
   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;  
   }  
   vector<pixel> getPixels(int x, int y) const{  
     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;  
   }  
 };  };
 ostream& operator<<(ostream &os,const PatMatch &pm){  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 */  #endif /* _PAT_MATCH_H */


Generate output suitable for use with a patch program
Legend:
Removed from v.1.3  
changed lines
  Added in v.1.5

ktanaka

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help