// SubStr4.cpp // The source file for the SubStr4 class. #include "SubStr4.h" #include SubStr4::SubStr4(char *val,int num) { str[0]=val[0]; str[1]=val[1]; str[2]=val[2]; str[3]=val[3]; index=num; english=0; } SubStr4::SubStr4(FILE *fin) { read(fin); } SubStr4::SubStr4(FILE *fin,int num) { fseek(fin,256*num,SEEK_SET); read(fin); } SubStr4::SubStr4(FILE *fin,char *val) { fseek(fin,256*SubStr4::calcIndex(val),SEEK_SET); read(fin); } int SubStr4::write(FILE *fout) const { fwrite(str,sizeof(char),4,fout); fwrite(&index,sizeof(int),1,fout); fwrite(&english,sizeof(int),1,fout); char buf[256]; for(int i=0; i<256; i++) buf[i]=0; fwrite(buf,sizeof(char),256-(4*sizeof(char)+2*sizeof(int)),fout); return 0; } int SubStr4::writeRandom(FILE *fout) const { fseek(fout,256*index,SEEK_SET); return write(fout); } void SubStr4::print() const { cout << str[0] << str[1] << str[2] << str[3] << " " << index << " " << english << endl; } int SubStr4::compare(const SubStr &s) const { for(int i=0; (i<4) && (istr[i]) return 1; } if(s.getLength()<4) return -1; if(s.getLength()>4) return 1; return 0; } int SubStr4::compare(const string &s) const { for(int i=0; (i<4) && (istr[i]) return 1; } if(s.length()<4) return -1; if(s.length()>4) return 1; return 0; } int SubStr4::getLength() const { return 4; } int SubStr4::getEnglish() const { return english; } void SubStr4::setEnglish() { english=1; } void SubStr4::clearEnglish() { english=0; } char SubStr4:: operator[](int n) const { if((n<0) || (n>3)) return 0; return str[n]; } int SubStr4::maxToGen() { return 26*26*26*26; } // Do a conversion from an integer to what substring should be at that location. void SubStr4::generate(FILE *fout,int num) { SubStr4 ret; ret.index=num; ret.str[3]=num%26 + 'a'; num/=26; ret.str[2]=num%26 + 'a'; num/=26; ret.str[1]=num%26 + 'a'; num/=26; ret.str[0]=num%26 + 'a'; ret.write(fout); } // Do a conversion from 4 chars to a number. int SubStr4::calcIndex(char *val) { int ret=0; for(int i=3,p=1; i>=0; p*=26,i--) { // aaaa=0 ret+=p*(val[i]-'a'); } return ret; } int SubStr4::stringLength() { return 4; } SubStr4::SubStr4() { index=0; english=0; } void SubStr4::read(FILE *fin) { fread(str,sizeof(char),4,fin); fread(&index,sizeof(int),1,fin); fread(&english,sizeof(int),1,fin); char buf[256]; fread(buf,sizeof(char),256-(4*sizeof(char)+2*sizeof(int)),fin); }