string_def.cpp
来自「FreeFem++可以生成高质量的有限元网格。可以用于流体力学」· C++ 代码 · 共 163 行
CPP
163 行
//#pragma dont_inline on//#pragma inline_depth(1)#include "config-wrapper.h"#include <complex>#include "AFunction.hpp"#include <cstdarg>#include <cstring>#include "error.hpp"#include "lex.hpp"#include "RNM.hpp"#include "Operator.hpp"// for exec routine #include "rgraph.hpp"#include "InitFunct.hpp"#include <queue>#include "array_init.hpp"class SubString { public: string * s; long i,j; SubString(string **ss,long ii,long jj) :s(*ss),i(ii),j(jj) {} SubString(string **ss,const SubArray & sb) :s(*ss),i(sb.start),j(sb.n) {ffassert(sb.step==1);}};extern Map_type_of_map map_type_of_map ; // to store te type extern Map_type_of_map map_pair_of_type ; // to store te type extern basicForEachType * typevarreal, * typevarcomplex; // type of real and complex variableextern int TheCurrentLine; // unset: by defaultextern long mpisize,mpirank;long get_size(string * p) { ffassert(p ) ; return p->size() ;}long get_sizep(string ** p) { ffassert(p && *p) ; return (*p)->size() ;}string ** get_replace(string ** pp,long i,long j, string *rr) { ffassert(pp && *pp ) ; string s=**pp; // copy modif for windows pb free s.replace(i,j,*rr); delete *pp; *pp = new string(s); return pp; } // a( : ) = "sqsd";struct set_substring: public binary_function<SubString,string *,SubString> { static SubString f(SubString const & a, string *const & b) { string s=*a.s; s.replace(a.i,a.j,*b); * a.s = s; // bofbof pour windows return a;}}; SubString fSubString( string ** const & a,const SubArray & b) { return SubString(a,b);} template<bool B> struct String_find { string *p; String_find(string *pp) :p(pp){ffassert(p);} String_find(string **pp) :p(*pp){ffassert(p);} long find(string *f) const { return p->find(*f);} long find(string *f,long i) const { return p->find(*f,i);} }; // spacialisation find -> rfind (bofbof ??) template<> struct String_find<false> { string *p; String_find(string *pp) :p(pp){ffassert(p);} String_find(string **pp) :p(*pp){ffassert(p);} long find(string *f) const { return p->rfind(*f);} long find(string *f,long i) const { return p->rfind(*f,i);} }; template<bool B>String_find<B> to_String_find(string * p) { return String_find<B>(p);}template<bool B>String_find<B> to_String_findp(string ** p) { return String_find<B>(*p);}template<bool B> long string_find(String_find<B> sf,string *s) { return sf.find(s); }template<bool B> long string_find( String_find<B> const & sf,string *const &s,long const &i) { return sf.find(s,i); } istream* getlinep( istream* f, string ** s) { getline(*f,**s); return f; }void initStringOperator(){ Dcl_Type<SubString>(); // aType tstringp =atype<string*>(); //aType tstringpp =atype<string**>(); Dcl_Type< String_find<true> > (); Dcl_Type< String_find<false> > ();// ajoute pour les chaines Add<string **>("size",".",new OneOperator1<long,string **>(get_sizep) ); Add<string **>("length",".",new OneOperator1<long,string **>(get_sizep) ); Add<string *>("size",".",new OneOperator1<long,string *>(get_size) ); Add<string *>("length",".",new OneOperator1<long,string *>(get_size) ); Add<string *>("find",".",new OneOperator1<String_find<true>,string * >(to_String_find<true> )); Add<string *>("rfind",".",new OneOperator1<String_find<false>,string * >(to_String_find<false> )); Add<string **>("find",".",new OneOperator1<String_find<true>,string ** >(to_String_findp<true> )); Add<string **>("rfind",".",new OneOperator1<String_find<false>,string ** >(to_String_findp<false> )); Add<String_find<true> >("(","",new OneOperator2<long,String_find<true>,string *>(string_find ) ); Add<String_find<false> >("(","",new OneOperator2<long,String_find<false>,string *>(string_find ) ); Add<String_find<true> >("(","",new OneOperator3_<long,String_find<true>,string *,long>(string_find ) ); Add<String_find<false> >("(","",new OneOperator3_<long,String_find<false>,string *,long>(string_find ) ); TheOperators->Add("=", new OneBinaryOperator<set_substring > ); Add<string**>("(","",new OneOperator2_<SubString,string **,SubArray>(fSubString)); TheOperators->Add("getline",new OneOperator2<istream*,istream*,string**>(getlinep)); // Add<string**>("[","",new OneOperator2_<SubString,string **,SubArray>(fSubString)); //Add<string **>("rfind",".",new OneOperator4_<long,string **,long,long,string *>(get_replace) ); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?