⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getpot.h

📁 一个用来实现偏微分方程中网格的计算库
💻 H
📖 第 1 页 / 共 5 页
字号:
}inline const char*   GetPot::get(unsigned Idx, const char* Default) const{   if( Idx >= argv.size() ) return Default;  else                     return argv[Idx].c_str();}inline unsigned GetPot::size() const{ return argv.size(); }//     -- next() function group  inline int  GetPot::next(int Default)    {   if( search_failed_f ) return Default;  cursor++;   if( cursor >= argv.size() )   { cursor = argv.size(); return Default; }  const std::string Remain = __get_remaining_string(argv[cursor], prefix);  return Remain != "" ? __convert_to_type(Remain, Default) : Default;}inline double GetPot::next(double Default) {   if( search_failed_f ) return Default;  cursor++;  if( cursor >= argv.size() )   { cursor = argv.size(); return Default; }  std::string Remain = __get_remaining_string(argv[cursor], prefix);  return Remain != "" ? __convert_to_type(Remain, Default) : Default;}inline const char*   GetPot::next(const char* Default) {   if( search_failed_f ) return Default;  cursor++;   if( cursor >= argv.size() )  { cursor = argv.size(); return Default; }  const std::string Remain = __get_remaining_string(argv[cursor], prefix);  return Remain != "" ? Remain.c_str() : Default;}inline std::stringGetPot::next(const std::string &Default) {   if( search_failed_f ) return Default;  cursor++;   if( cursor >= argv.size() )  { cursor = argv.size(); return Default; }  const std::string Remain = __get_remaining_string(argv[cursor], prefix);  return Remain != "" ? Remain : Default;}//     -- follow() function group //        distinct option to be searched forinline int GetPot::follow(int Default, const char* Option) {   if( search(Option) == false ) return Default;  return next(Default);}inline double  GetPot::follow(double Default, const char* Option){   if( search(Option) == false ) return Default;  return next(Default);}inline const char* GetPot::follow(const char* Default, const char* Option){   if( search(Option) == false ) return Default;  return next(Default);}#ifdef GETPOT_ALLOW_VARGS  //     -- second follow() function group   //        multiple option to be searched for  inline int   GetPot::follow(int Default, unsigned No, const char* P, ...)   {     if( No == 0 ) return Default;    if( search(P) == true ) return next(Default);      std::va_list ap;    va_start(ap, P);    for(unsigned i=1; i<No; i++) {      char* Opt = va_arg(ap, char *);      if( search(Opt) == true ) {         va_end(ap);         return next(Default);       }    }    va_end(ap);     return Default;  }  inline double    GetPot::follow(double Default, unsigned No, const char* P, ...)  {    if( No == 0 ) return Default;    if( search(P) == true ) return next(Default);      std::va_list ap;    va_start(ap, P);    for(unsigned i=1; i<No; i++) {      char* Opt = va_arg(ap, char *);      if( search(Opt) == true ) {         va_end(ap);         return next(Default);       }    }    va_end(ap);     return Default;  }  inline const char*   GetPot::follow(const char* Default, unsigned No, const char* P, ...)  {    if( No == 0 ) return Default;    if( search(P) == true ) return next(Default);      std::va_list ap;    va_start(ap, P);    for(unsigned i=1; i<No; i++) {      char* Opt = va_arg(ap, char *);      if( search(Opt) == true ) {         va_end(ap);         return next(Default);       }    }    va_end(ap);     return Default;  }#endif // GETPOT_ALLOW_VARGS///////////////////////////////////////////////////////////////////////////////// (*) directly connected options//.............................................................................//inline intGetPot::direct_follow(int Default, const char* Option) {  const char* FollowStr = __match_starting_string(Option);  if( FollowStr == 0 )                    return Default;  if( ++cursor >= argv.size() ) cursor = argv.size();  return __convert_to_type(FollowStr, Default);}inline double GetPot::direct_follow(double Default, const char* Option) {  const char* FollowStr = __match_starting_string(Option);  if( FollowStr == 0 )                   return Default;  if( ++cursor >= argv.size() ) cursor = argv.size();  return __convert_to_type(FollowStr, Default);}inline const char* GetPot::direct_follow(const char* Default, const char* Option){  if( search_failed_f ) return Default;  const char* FollowStr = __match_starting_string(Option);  if( FollowStr == 0 )          return Default;  if( ++cursor >= argv.size() ) cursor = argv.size();  return FollowStr;}inline const char*GetPot::__match_starting_string(const char* StartString)   // pointer  to the place where the string after   //          the match inside the found argument starts.  // 0        no argument matches the starting string.{  const unsigned N = std::strlen(StartString);  unsigned OldCursor = cursor;  if( OldCursor >= argv.size() ) OldCursor = argv.size() - 1;  search_failed_f = true;  // (*) first loop from cursor position until end  unsigned c = cursor;  for(; c < argv.size(); c++) {    if( std::strncmp(StartString, argv[c].c_str(), N) == 0)    { cursor = c; search_failed_f = false; return &(argv[c].c_str()[N]); }  }  if( ! search_loop_f ) return false;  // (*) second loop from 0 to old cursor position  for(c = 1; c < OldCursor; c++) {    if( std::strncmp(StartString, argv[c].c_str(), N) == 0)    { cursor = c; search_failed_f = false; return &(argv[c].c_str()[N]); }  }  return 0;}///////////////////////////////////////////////////////////////////////////////// (*) search for flags//.............................................................................//inline boolGetPot::options_contain(const char* FlagList) const{  // go through all arguments that start with a '-' (but not '--')  std::string str;  for(std::vector<std::string>::const_iterator it = argv.begin();      it != argv.end();      it++) {    str = __get_remaining_string(*it, prefix);    if( str.length() >= 2 && str[0] == '-' && str[1] != '-' )      if( __check_flags(str, FlagList) ) return true;  }  return false;}inline boolGetPot::argument_contains(unsigned Idx, const char* FlagList) const{  if( Idx >= argv.size() ) return false;  if( prefix == "" )    // search argument for any flag in flag list    return __check_flags(argv[Idx], FlagList);  // if a prefix is set, then the argument index is the index  //   inside the 'namespace'  // => only check list of arguments that start with prefix  unsigned no_matches = 0;  for(unsigned i=0; i<argv.size(); i++) {    const std::string Remain = __get_remaining_string(argv[i], prefix);    if( Remain != "") {      no_matches += 1;      if( no_matches == Idx)	return __check_flags(Remain, FlagList);    }  }  // no argument in this namespace  return false;}inline boolGetPot::__check_flags(const std::string& Str, const char* FlagList) const{  for(const char* p=FlagList; *p != '\0' ; p++)    if( Str.find(*p) != std::string::npos ) return true; // found something  return false;}///////////////////////////////////////////////////////////////////////////////// (*) nominus argumentsinline std::vector<std::string>  GetPot::nominus_vector() const// return vector of nominus arguments{  std::vector<std::string> nv;  for(std::vector<unsigned>::const_iterator it = idx_nominus.begin();      it != idx_nominus.end();      it++) {    nv.push_back(argv[*it]);  }  return nv;}inline const char* GetPot::next_nominus(){  if( nominus_cursor < int(idx_nominus.size()) - 1 )    return argv[idx_nominus[++nominus_cursor]].c_str();  return 0;}inline void GetPot::reset_nominus_cursor(){ nominus_cursor = -1; }///////////////////////////////////////////////////////////////////////////////// (*) variables//.............................................................................//inline boolGetPot::have_variable(const char* VarName) const{  const variable* sv = __find_variable(VarName);  if (sv == 0) return false;  return true;}inline boolGetPot::operator()(const char* VarName, bool Default) const{  const variable* sv = __find_variable(VarName);  if ( sv == 0 ) return Default;  return __convert_to_type(sv->original, Default);}inline int GetPot::operator()(const char* VarName, int Default) const{  const variable*  sv = __find_variable(VarName);  if( sv == 0 ) return Default;  return __convert_to_type(sv->original, Default);}inline doubleGetPot::operator()(const char* VarName, double Default) const{  const variable*  sv = __find_variable(VarName);  if( sv == 0 ) return Default;  return __convert_to_type(sv->original, Default);}inline long doubleGetPot::operator()(const char* VarName, long double Default) const{  const variable*  sv = __find_variable(VarName);  if( sv == 0 ) return Default;  return __convert_to_type(sv->original, Default);}inline const char*GetPot::operator()(const char* VarName, const char* Default) const{  const variable*  sv = __find_variable(VarName);  if( sv == 0 ) return Default;  return sv->original.c_str();}inline std::stringGetPot::operator()(const char* VarName, const std::string& Default) const{  const variable*  sv = __find_variable(VarName);  if( sv == 0 ) return Default;  return sv->original;}inline int GetPot::operator()(const char* VarName, int Default, unsigned Idx) const{  const variable* sv = __find_variable(VarName);  if( sv == 0 ) return Default;  const std::string*  element = sv->get_element(Idx);  if( element == 0 ) return Default;  return __convert_to_type(*element, Default);}inline doubleGetPot::operator()(const char* VarName, double Default, unsigned Idx) const{  const variable* sv = __find_variable(VarName);  if( sv == 0 ) return Default;  const std::string*  element = sv->get_element(Idx);  if( element == 0 ) return Default;  return __convert_to_type(*element, Default);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -