int main(int argc, char **argv) { gsl_matrix *m; FILE *f; size_t *result; double work; int rows, cols, keep, i; time_t start, end; if (argc != 3) { fprintf(stderr, "USAGE: %s dist_matrix keep_rows\n\n", argv[0]); fprintf(stderr, "dist_matrix should have one line with 'n_rows n_cols' "); fprintf(stderr, "followed by the matrix.\n"); return 1; } keep = atoi(argv[2]); f = fopen(argv[1], "r"); /* Read dimensions: width then height */ assert(fscanf(f, "%d %d", &rows, &cols) == 2); m = gsl_matrix_alloc(rows, cols); assert(!gsl_matrix_fscanf(f, m)); fclose(f); time(&start); result = pam(m, keep, NULL, &work); time(&end); for(i = 0; i < keep; i++) printf("%lu ", result[i]); printf("\n"); printf("Total work: %f\n", work); printf("Took: %.2lfs\n", difftime(end, start)); gsl_matrix_free(m); free(result); return 0; }
bool InitializeStructure::FiniteStateMachineAnalysis(char *buffer,size_t size,int separator,int codepage) { char *p=buffer; char *end=buffer+size; char *secStart=nullptr; char *keyStart=nullptr; char *valueStart=nullptr; auto anonymous=new IniSection(); auto currentSec=anonymous; enum _FSMState{ STAT_NONE=0, STAT_SECTION, STAT_KEY, STAT_VALUE, STAT_COMMENT }state=STAT_NONE; for(;p<end;p++) { switch(state) { case STAT_NONE: { if(*p==L'[') { state=STAT_SECTION; secStart=p+1; }else if(*p=='#'||*p==';') { state=STAT_COMMENT; }else if(!isspace(*p)){ state=STAT_KEY; keyStart=p; } break; } case STAT_SECTION: { if(*p==']') { *p='\0'; std::string ke=keyStart; std::string va=valueStart; wcharget k(ke.c_str()); wcharget v(va.c_str()); Parameters pam(std::wstring(k.Get()),std::wstring(v.Get()),std::wstring(),0); currentSec->items.push_back(pam); state=STAT_NONE; } break; } case STAT_COMMENT: { if(*p=='\n') { state=STAT_NONE; break; } break; } case STAT_KEY: { if(*p==separator||*p=='\t') { *p='\0'; state=STAT_VALUE; valueStart=p+1; } break; } case STAT_VALUE: { if(*p=='\n'||*p=='\r') { *p='\0'; std::string ke=keyStart; std::string va=valueStart; wcharget k(ke.c_str()); wcharget v(va.c_str()); Parameters pam(std::wstring(k.Get()),std::wstring(v.Get()),std::wstring(),0); state=STAT_NONE; } break; } default: break; } } if(state==STAT_VALUE) { //// std::string ke=keyStart; std::string va=valueStart; wcharget k(ke.c_str()); wcharget v(va.c_str()); Parameters pam(std::wstring(k.Get()),std::wstring(v.Get()),std::wstring(),0); } return true; }
bool InitializeStructure::FiniteStateMachineAnalysis(wchar_t *buffer,size_t size,int separator) { wchar_t *p=buffer; wchar_t *end=buffer+size; wchar_t *secStart=nullptr; wchar_t *keyStart=nullptr; wchar_t *valueStart=nullptr; auto anonymous=new IniSection(); auto currentSec=anonymous; setlocale(LC_ALL, NULL); enum _FSMState{ STAT_NONE=0, STAT_SECTION, STAT_KEY, STAT_VALUE, STAT_COMMENT }state=STAT_NONE; for(;p<end;p++) { switch(state) { case STAT_NONE: { if(*p==L'[') { state=STAT_SECTION; secStart=p+1; }else if(*p=='#'||*p==';') { state=STAT_COMMENT; }else if(!iswspace(*p)){ state=STAT_KEY; keyStart=p; } break; } case STAT_SECTION: { if(*p==']') { *p='\0'; currentSec=new IniSection(); std::wstring wsec=secStart; attrTable.insert(std::pair<std::wstring, decltype(currentSec)>(wsec, currentSec)); state=STAT_NONE; } break; } case STAT_COMMENT: { if(*p=='\n') { state=STAT_NONE; break; } break; } case STAT_KEY: { if(*p==separator||*p=='\t') { *p='\0'; state=STAT_VALUE; valueStart=p+1; } break; } case STAT_VALUE: { if(*p=='\n'||*p=='\r') { *p='\0'; std::wstring ke=keyStart; std::wstring va=valueStart; Parameters pam(ke,va,std::wstring(),0); currentSec->items.push_back(pam); state=STAT_NONE; } break; } default: break; } } if(state==STAT_VALUE) { //// std::wstring ke=keyStart; std::wstring va=valueStart; Parameters pam(ke,va,std::wstring(),0); currentSec->items.push_back(pam); } return true; }