#pragma once #ifndef PRINT_DEF #define PRINT_DEF #include //for strings #include //for printf,scanf (library for C) #include //for atoi, atof #include //C++ header for string #include #include #include #endif #include #include #ifndef PARSE_DEF #define PARSE_DEF #define MAXBUFLEN 200 void getFromString (const char* buf, int* n); void getFromString (const char* buf, size_t* n); void getFromString (const char* buf, double* n); void getFromString (const char* buf, char* n); int parseString(FILE* input, const char* keyword, const size_t bufLen, char* n); template int parseNumber(FILE* input, const char* keyword, const size_t bufLen, T* n); template int parseArray(FILE* input, const char* keyword, const size_t bufLen, const size_t arrLen, T y[]); // ///*template function for parsing initial mole fraction in the droplet*/ //template //int parseDropSpec(FILE* input, const char* keyword, const size_t bufLen,const int* dropType, std::vector& dropPara){ // char buf[bufLen]; // char buf1[bufLen]; // char comment[1]; // char *ret; // // while (fgets(buf,bufLen, input)!=NULL){ // comment[0]=buf[0]; // if(strncmp(comment,"#",1)==0){ // //printf("Comment!:%s\n",buf); // } // else{ // ret=strtok(buf,"="); // if(strcmp(ret,keyword)==0){ // /*offset buf by keyword size + 1 for the "="*/ // /* Second argument in the strncpy function is the address !!! */ // /* Note: current version of code can only take dropType =0 or 1 */ // strncpy(buf1, buf+strlen(keyword)+1, bufLen); // printf("%10s: ",keyword); // if(*dropType ==0){ // /* Convert from char* to double */ //// std::string str(buf1); //// dropPara.push_back(str); // T temp_num = std::stod(buf1) ; // dropPara.push_back(temp_num) ; // printf("%.3f\n",dropPara[0]); // }else{ // std::istringstream iss(buf1) ; // std::string token; // while(std::getline(iss,token,',')){ // T temp_num = std::stod(token); // dropPara.push_back(temp_num); // } // printf("%.3f,%.3f\n",dropPara[0],dropPara[1]); // } // rewind(input); // return(0); // } // } // } // rewind(input); // return(-1); //} /* Extract the droplet species and molefractions from input file using template */ /* Generic template function */ //template //int parseDropSpec(FILE* input, const char* keyword, const size_t bufLen,const int* dropType, std::vector& dropPara){ // char buf[bufLen]; // char buf1[bufLen]; // char comment[1]; // char *ret; // T* n; // // while (fgets(buf,bufLen, input)!=NULL){ // comment[0]=buf[0]; // if(strncmp(comment,"#",1)==0){ // //printf("Comment!:%s\n",buf); // } // else{ // ret=strtok(buf,"="); // if(strcmp(ret,keyword)==0){ // /*offset buf by keyword size + 1 for the "="*/ // /* Second argument in the strncpy function is the address !!! */ // /* Note: current version of code can only take dropType =0 or 1 */ // strncpy(buf1, buf+strlen(keyword)+1, bufLen); // printf("%10s: ",keyword); // if(*dropType ==0){ // getFromString(buf1,n); // dropPara.push_back(*n); // }else{ // std::istringstream iss(buf1) ; // std::string token; // while(std::getline(iss,token,',')){ // T arg = std::stod(token); // dropPara.push_back(arg); // } // printf("%15.6e,%15.6e\n",dropPara[0],dropPara[1]); // } // rewind(input); // return(0); // } // } // } // rewind(input); // return(-1); //} // ///* Specialization for string */ //template<> //int parseDropSpec(FILE* input, const char* keyword, const size_t bufLen,const int* dropType, std::vector& dropPara); int parseDrop(FILE* input, const char* keyword,char dropSpec[][10],double dropMole[],const size_t bufLen); #include "parse.hpp" #endif