spec_fptrfinder.hpp
Go to the documentation of this file.
101 SetMaps& map0M(const typename MapTypes<D,MTag>::fmap0_extraM& map0M){ map0M_=&map0M; return *this; } 102 SetMaps& map1M(const typename MapTypes<D,MTag>::fmap1_extraM& map1M){ map1M_=&map1M; return *this; } 103 SetMaps& map2M(const typename MapTypes<D,MTag>::fmap2_extraM& map2M){ map2M_=&map2M; return *this; } 104 SetMaps& map0I(const typename MapTypes<D,MTag>::fmap0_extraI& map0I){ map0I_=&map0I; return *this; } 105 SetMaps& map1I(const typename MapTypes<D,MTag>::fmap1_extraI& map1I){ map1I_=&map1I; return *this; } 106 SetMaps& map2I(const typename MapTypes<D,MTag>::fmap2_extraI& map2I){ map2I_=&map2I; return *this; } 109 SetMaps& omap1(const std::map<std::string,std::map<int,double>>& om1){ omap1_=&om1; return *this;} 110 SetMaps& omap2(const std::map<std::string,std::map<int,std::map<int,double>>>& om2){ omap2_=&om2; return *this;} 115 // (Obviously don't set both of the above flags at once, or else there will be no maps to search...) 344 errmsg << "Search failed with error_code "<<error_code<<" from FptrFinder with label "<<label<<": "<<get_error_message(); 356 errmsg << "An index ("<<label<<") was not set when retrieving item of type '"<<label<<"' with string reference '"<<lastname<<"'!" <<std::endl; 365 bool search_map(const std::string& name, const Map* const map, typename Map::const_iterator& it) 371 errmsg << "Tried to use FptrFinder to search a SubSpectrum function pointer map, but did not correctly supply the map to FptrFinder! This is a bug in the SubSpectrum class; please report it. (Attempted to access map of type "<<typeid(Map).name()<<")"; 386 errmsg << "Safety check for map iterator failed! (in FptrFinder). This indicates a bug in the FptrFinder class; please report it."; 400 bool check_indices_1(const std::string& name, const ITER& it, const int i, const int whichit, const bool debug) 423 bool check_indices_2(const std::string& /*name*/, const ITER& it, const int i, const int j, const int whichit) 566 if( search_map(name,map1_,it1) ) { check(it1_safe()); found=check_indices_1(name,it1 ,i,6,debug); } 567 else if( search_map(name,map1W_,it1W) ){ check(it1W_safe()); found=check_indices_1(name,it1W,i,13,debug); } 568 else if( search_map(name,map1M_,it1M) ){ check(it1M_safe()); found=check_indices_1(name,it1M,i,7,debug); } 569 else if( search_map(name,map1I_,it1I) ){ check(it1I_safe()); found=check_indices_1(name,it1I,i,8,debug); } 582 else if( search_map(name,map2W_,it2W) ){ check(it2W_safe()); found=check_indices_2(name,it2W,i,j,14); } 583 else if( search_map(name,map2M_,it2M) ){ check(it2M_safe()); found=check_indices_2(name,it2M,i,j,10); } 584 else if( search_map(name,map2I_,it2I) ){ check(it2I_safe()); found=check_indices_2(name,it2I,i,j,11); } 596 bool find(const std::string& name, bool /*doublecheck*/=true, SafeBool check_antiparticle = SafeBool(true)) 613 check_antiparticle = SafeBool(false); // No antiparticle PDB entry, so cancel that part of search. 663 bool find(const std::string& name, int i, bool /*doublecheck*/=true, SafeBool check_antiparticle = SafeBool(true)) 681 check_antiparticle = SafeBool(false); // No antiparticle PDB entry, so cancel that part of search. 754 template<class HS, class MT> const std::map<std::string,double> FptrFinder<HS,MT>::nullmap_ito0 = std::map<std::string,double> (); // 0 755 template<class HS, class MT> const std::map<std::string,std::map<int,double>> FptrFinder<HS,MT>::nullmap_ito1 = std::map<std::string,std::map<int,double>>(); // 1 756 template<class HS, class MT> const std::map<std::string,std::map<int,std::map<int,double>>> FptrFinder<HS,MT>::nullmap_ito2 = std::map<std::string,std::map<int,std::map<int,double>>>(); // 2 758 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap0 FptrFinder<HS,MT>::nullmap_it0 = typename MapTypes<typename HS::D,MT>::fmap0 (); // 3 759 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap1 FptrFinder<HS,MT>::nullmap_it1 = typename MapTypes<typename HS::D,MT>::fmap1 (); // 6 760 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap2 FptrFinder<HS,MT>::nullmap_it2 = typename MapTypes<typename HS::D,MT>::fmap2 (); // 9 //was 7 761 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap0W FptrFinder<HS,MT>::nullmap_it0W = typename MapTypes<typename HS::D,MT>::fmap0W (); // 12 762 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap1W FptrFinder<HS,MT>::nullmap_it1W = typename MapTypes<typename HS::D,MT>::fmap1W (); // 13 763 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap2W FptrFinder<HS,MT>::nullmap_it2W = typename MapTypes<typename HS::D,MT>::fmap2W (); // 14 764 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap0_extraM FptrFinder<HS,MT>::nullmap_it0M = typename MapTypes<typename HS::D,MT>::fmap0_extraM(); // 4 765 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap1_extraM FptrFinder<HS,MT>::nullmap_it1M = typename MapTypes<typename HS::D,MT>::fmap1_extraM(); // 7 766 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap2_extraM FptrFinder<HS,MT>::nullmap_it2M = typename MapTypes<typename HS::D,MT>::fmap2_extraM(); // 10 767 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap0_extraI FptrFinder<HS,MT>::nullmap_it0I = typename MapTypes<typename HS::D,MT>::fmap0_extraI(); // 5 768 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap1_extraI FptrFinder<HS,MT>::nullmap_it1I = typename MapTypes<typename HS::D,MT>::fmap1_extraI(); // 8 769 template<class HS, class MT> const typename MapTypes<typename HS::D,MT>::fmap2_extraI FptrFinder<HS,MT>::nullmap_it2I = typename MapTypes<typename HS::D,MT>::fmap2_extraI(); // 11 897 errmsg << "Error! Unanticipated whichiter code received while trying to call a function from SubSpectrum maps. This indicates a bug in the FptrFinder class. Please report it! (this FptrFinder has label="<<ff->label<<" and is specialised for Getter maps, current error_code="<<ff->error_code<<", whichiter="<<ff->whichiter<<")"<<std::endl; 904 errmsg << "Error! Tried to call function from SubSpectrum maps without first finding the function! This indicates a bug, probably in the Spectrum or SubSpectrum classes. Please report it! (this FptrFinder has label="<<ff->label<<" and is specialised for Getter maps, current error_code="<<ff->error_code<<")"<<std::endl; 908 errmsg << "Error! Unanticipated error code received while trying to call a function from SubSpectrum maps. This indicates a bug in the FptrFinder class. Please report it! (this FptrFinder has label="<<ff->label<<" and is specialised for Getter maps, current error_code="<<ff->error_code<<")"<<std::endl; 941 errmsg << "Error! 'Setter' version of FptrFinder tried to use non-const 'fakethis' pointer, but the pointer was not initialised! This indicates a bug in the FptrFinder class. Please report it! (this FptrFinder has label="<<ff->label<<" and is specialised for Setter maps, current error_code="<<ff->error_code<<", whichiter="<<ff->whichiter<<")"<<std::endl; 954 errmsg << "Error! 'Setter' version of FptrFinder called a map-access case reserved for override maps, however these only work in the 'Getter' version (since SubSpectrum override values are not supposed to be set via an FptrFinder). This indicates a bug in the FptrFinder class. Please report it! (this FptrFinder has label="<<ff->label<<" and is specialised for Setter maps, current error_code="<<ff->error_code<<", whichiter="<<ff->whichiter<<")"<<std::endl; 1015 errmsg << "Error! Unanticipated whichiter code received while trying to call a function from SubSpectrum maps. This indicates a bug in the FptrFinder class. Please report it! (this FptrFinder has label="<<ff->label<<" and is specialised for Setter maps, current error_code="<<ff->error_code<<", whichiter="<<ff->whichiter<<")"<<std::endl; 1022 errmsg << "Error! Tried to call function from SubSpectrum maps without first finding the function! This indicates a bug, probably in the Spectrum or SubSpectrum classes. Please report it! (this FptrFinder has label="<<ff->label<<" and is specialised for Getter maps, current error_code="<<ff->error_code<<")"<<std::endl; 1026 errmsg << "Error! Unanticipated error code received while trying to call a function from SubSpectrum maps. This indicates a bug in the FptrFinder class. Please report it! (this FptrFinder has label="<<ff->label<<" and is specialised for Getter maps, current error_code="<<ff->error_code<<")"<<std::endl;
const std::map< std::string, std::map< int, double > > * omap1_ Definition: spec_fptrfinder.hpp:180 FptrFinder(const SetMaps< HostSpec, MTag > ¶ms) Definition: spec_fptrfinder.hpp:277 const std::map< std::string, std::map< int, std::map< int, double > > > * omap2_ Definition: spec_fptrfinder.hpp:142 const bool override_only_ Flag to permit searching only override maps. Definition: spec_fptrfinder.hpp:175 bool ito0_safe() Functions to check whether or not it is safe to dereference the above iterators. Definition: spec_fptrfinder.hpp:233 std::string lastname Last used search string (only set if there was a problem, for error messages) Definition: spec_fptrfinder.hpp:162 const MapTypes< D, MTag >::fmap1_extraM * map1M_ Definition: spec_fptrfinder.hpp:133 bool find(const std::string &name, bool=true, SafeBool check_antiparticle=SafeBool(true)) Search function for 0-index maps. Definition: spec_fptrfinder.hpp:596 const bool no_overrides_ Flag to disable searching of override maps (for retrieving original, unoverriden values) ... Definition: spec_fptrfinder.hpp:172 static const MapTypes< D, MTag >::fmap2W nullmap_it2W Definition: spec_fptrfinder.hpp:224 std::string get_error_message() Definition: spec_fptrfinder.hpp:323 SetMaps & map1I(const typename MapTypes< D, MTag >::fmap1_extraI &map1I) Definition: spec_fptrfinder.hpp:105 const MapTypes< D, MTag >::fmap2_extraM * map2M_ Definition: spec_fptrfinder.hpp:191 bool find(const std::string &name, int i, int j) Search function for 2-index maps. Definition: spec_fptrfinder.hpp:718 CallFcn< HostSpec, MTag > callfcn Caller for whatever function was found HostSpec has to work slightly differently depending on whether... Definition: spec_fptrfinder.hpp:274 const MapTypes< D, MTag >::fmap0_extraI * map0I_ Definition: spec_fptrfinder.hpp:135 static const std::map< std::string, double > nullmap_ito0 empty maps used to initialise the above iterators Definition: spec_fptrfinder.hpp:216 const MapTypes< D, MTag >::fmap1W * map1W_ Definition: spec_fptrfinder.hpp:187 const MapTypes< D, MTag >::fmap1_extraI * map1I_ Definition: spec_fptrfinder.hpp:136 FptrFinder friend class for implementing named parameter idiom. Definition: spec_fptrfinder.hpp:41 const MapTypes< D, MTag >::fmap0_extraM * map0M_ Definition: spec_fptrfinder.hpp:132 Definition: safebool.hpp:37 MapTypes< DerivedSpec, MapTag::Get > MT Definition: spec_fptrfinder.hpp:782 void check(bool safe) Check if it is (supposed to be) safe to dereference a map iterator Throw an error if it isn't... Definition: spec_fptrfinder.hpp:381 const std::map< std::string, double > * omap0_ Maps from base class (override maps, only used in getter case) Definition: spec_fptrfinder.hpp:140 SetMaps(const std::string &label, HostSpec *const fakethis) Definition: spec_fptrfinder.hpp:44 SetMaps & omap0(const std::map< std::string, double > &om0) base class override maps Definition: spec_fptrfinder.hpp:108 std::map< std::string, std::map< int, std::map< int, double > > >::const_iterator ito2 Definition: spec_fptrfinder.hpp:200 SetMaps & map1(const typename MapTypes< D, MTag >::fmap1 &map1) Definition: spec_fptrfinder.hpp:96 MapTypes< D, MTag >::fmap2W::const_iterator it2W Definition: spec_fptrfinder.hpp:207 bool find(const std::string &name, int i, bool=true, SafeBool check_antiparticle=SafeBool(true)) Search function for 1-index maps. Definition: spec_fptrfinder.hpp:663 std::map< std::string, double >::const_iterator ito0 Iterators needed for storing locatation of search result ...for override values. Definition: spec_fptrfinder.hpp:198 static const MapTypes< D, MTag >::fmap1_extraM nullmap_it1M Definition: spec_fptrfinder.hpp:226 CallFcn(FptrFinder< HostSpec, MapTag::Get > *host) Definition: spec_fptrfinder.hpp:786 HostSpec::D D Type of derived spectrum wrapper is known to HostSpec as D. Definition: spec_fptrfinder.hpp:92 double operator()() Definition: spec_fptrfinder.hpp:790 MapTypes< D, MTag >::fmap0_extraI::const_iterator it0I Definition: spec_fptrfinder.hpp:211 const MapTypes< D, MTag >::fmap0 * map0_ Maps filled by derived (wrapper) classes. Definition: spec_fptrfinder.hpp:183 const std::string label Label to help track down errors if they occur. Definition: spec_fptrfinder.hpp:159 bool find_2index(const std::string &name, const int i, const int j) Search 2-index wrapper maps. Definition: spec_fptrfinder.hpp:574 static const MapTypes< D, MTag >::fmap0_extraM nullmap_it0M Definition: spec_fptrfinder.hpp:225 SpecTraits< DerivedSpec >::Input Input Definition: spec_fptrfinder.hpp:923 SetMaps & map1W(const typename MapTypes< D, MTag >::fmap1W &map1W) Definition: spec_fptrfinder.hpp:99 MapTypes< D, MTag >::fmap1::const_iterator it1 Definition: spec_fptrfinder.hpp:203 const MapTypes< D, MTag >::fmap2W * map2W_ Definition: spec_fptrfinder.hpp:188 const std::map< std::string, std::map< int, double > > * omap1_ Definition: spec_fptrfinder.hpp:141 static const MapTypes< D, MTag >::fmap0 nullmap_it0 ...for derived class values Definition: spec_fptrfinder.hpp:219 const MapTypes< D, MTag >::fmap1 * map1_ Definition: spec_fptrfinder.hpp:184 bool find_override_2index(const std::string &name, const int i, const int j) Search 2-index override map. Definition: spec_fptrfinder.hpp:497 SetMaps & map2(const typename MapTypes< D, MTag >::fmap2 &map2) Definition: spec_fptrfinder.hpp:97 const MapTypes< D, MTag >::fmap1_extraI * map1I_ Definition: spec_fptrfinder.hpp:193 void operator()(const double set_value) Definition: spec_fptrfinder.hpp:933 SetMaps & map2W(const typename MapTypes< D, MTag >::fmap2W &map2W) Definition: spec_fptrfinder.hpp:100 const MapTypes< D, MTag >::fmap1W * map1W_ Definition: spec_fptrfinder.hpp:130 MapTypes< D, MTag >::fmap2::const_iterator it2 Definition: spec_fptrfinder.hpp:204 MapTypes< D, MTag >::fmap0::const_iterator it0 ...for derived class values Definition: spec_fptrfinder.hpp:202 bool search_map(const std::string &name, const Map *const map, typename Map::const_iterator &it) helper functions for searching individual maps Definition: spec_fptrfinder.hpp:365 static const MapTypes< D, MTag >::fmap2_extraM nullmap_it2M Definition: spec_fptrfinder.hpp:227 SetMaps & map2M(const typename MapTypes< D, MTag >::fmap2_extraM &map2M) Definition: spec_fptrfinder.hpp:103 MapTypes< D, MTag >::fmap0W::const_iterator it0W Definition: spec_fptrfinder.hpp:205 Definition: log_tags.hpp:35 MapTypes< D, MTag >::fmap2_extraI::const_iterator it2I Definition: spec_fptrfinder.hpp:213 SetMaps & map0I(const typename MapTypes< D, MTag >::fmap0_extraI &map0I) Definition: spec_fptrfinder.hpp:104 MapTypes< D, MTag >::fmap1_extraI::const_iterator it1I Definition: spec_fptrfinder.hpp:212 SetMaps & map1M(const typename MapTypes< D, MTag >::fmap1_extraM &map1M) Definition: spec_fptrfinder.hpp:102 Types needed for function pointer maps Partial specialisation for "setter" maps. Definition: spectrum_helpers.hpp:206 HostSpec *const fakethis HostSpec class pretending to be an extra set of class functions, so need the "this" pointer... Definition: spec_fptrfinder.hpp:165 static const std::map< std::string, std::map< int, double > > nullmap_ito1 Definition: spec_fptrfinder.hpp:217 static const std::map< std::string, std::map< int, std::map< int, double > > > nullmap_ito2 Definition: spec_fptrfinder.hpp:218 static const MapTypes< D, MTag >::fmap1_extraI nullmap_it1I Definition: spec_fptrfinder.hpp:229 const HostSpec *const const_fakethis_ Definition: spec_fptrfinder.hpp:121 SpecTraits< DerivedSpec >::Input Input Definition: spec_fptrfinder.hpp:780 SetMaps & map0(const typename MapTypes< D, MTag >::fmap0 &map0) derived class maps Definition: spec_fptrfinder.hpp:95 MapTypes< D, MTag >::fmap2_extraM::const_iterator it2M Definition: spec_fptrfinder.hpp:210 SetMaps & omap1(const std::map< std::string, std::map< int, double >> &om1) Definition: spec_fptrfinder.hpp:109 SpecTraits< DerivedSpec >::Model Model Definition: spec_fptrfinder.hpp:922 const MapTypes< D, MTag >::fmap2 * map2_ Definition: spec_fptrfinder.hpp:185 MapTypes< D, MTag >::fmap1_extraM::const_iterator it1M Definition: spec_fptrfinder.hpp:209 SpecTraits< DerivedSpec >::Model Model Definition: spec_fptrfinder.hpp:779 HostSpec::D D Get type of the derived spectrum wrapper from HostSpec. Definition: spec_fptrfinder.hpp:169 Helper class for calling function pointers found by FptrFinder. Definition: spec_fptrfinder.hpp:147 const MapTypes< D, MTag >::fmap0_extraI * map0I_ Definition: spec_fptrfinder.hpp:192 SetMaps & no_overrides(const bool flag) Flag to disable searching of override maps (for retrieving original, unoverriden values) ... Definition: spec_fptrfinder.hpp:112 static const MapTypes< D, MTag >::fmap0_extraI nullmap_it0I Definition: spec_fptrfinder.hpp:228 HostSpec::D DerivedSpec Definition: spec_fptrfinder.hpp:778 MapTypes< D, MTag >::fmap0_extraM::const_iterator it0M Definition: spec_fptrfinder.hpp:208 bool within_bounds(const int i, const std::set< int > allowed) Helper function for checking if indices are valid. Definition: spectrum_helpers.hpp:36 bool find_0index(const std::string &name) Search 0-index wrapper maps. Definition: spec_fptrfinder.hpp:524 Types needed for function pointer maps Partial specialisation for "getter" maps. Definition: spectrum_helpers.hpp:164 Abstract class for accessing general spectrum information. bool check_indices_1(const std::string &name, const ITER &it, const int i, const int whichit, const bool debug) Methods for setting parameters (named parameter idiom) E.g. Definition: spec_fptrfinder.hpp:400 MapTypes< D, MTag >::fmap1W::const_iterator it1W Definition: spec_fptrfinder.hpp:206 const std::map< std::string, std::map< int, std::map< int, double > > > * omap2_ Definition: spec_fptrfinder.hpp:181 static const MapTypes< D, MTag >::fmap1 nullmap_it1 Definition: spec_fptrfinder.hpp:220 SetMaps & map2I(const typename MapTypes< D, MTag >::fmap2_extraI &map2I) Definition: spec_fptrfinder.hpp:106 bool find_1index(const std::string &name, const int i) Search 1-index wrapper maps. Definition: spec_fptrfinder.hpp:554 static const MapTypes< D, MTag >::fmap2 nullmap_it2 Definition: spec_fptrfinder.hpp:221 std::map< std::string, std::map< int, double > >::const_iterator ito1 Definition: spec_fptrfinder.hpp:199 const MapTypes< D, MTag >::fmap0W * map0W_ Definition: spec_fptrfinder.hpp:129 const MapTypes< D, MTag >::fmap0_extraM * map0M_ Definition: spec_fptrfinder.hpp:189 void raise_error(const std::string &origin) Definition: spec_fptrfinder.hpp:339 Forward declare base traits class which communicates Model and Input typedefs from the wrapper class ... Definition: spec_head.hpp:59 MapTypes< DerivedSpec, MapTag::Set > MT Definition: spec_fptrfinder.hpp:925 const MapTypes< D, MTag >::fmap2_extraI * map2I_ Definition: spec_fptrfinder.hpp:194 const MapTypes< D, MTag >::fmap2_extraI * map2I_ Definition: spec_fptrfinder.hpp:137 SetMaps & omap2(const std::map< std::string, std::map< int, std::map< int, double >>> &om2) Definition: spec_fptrfinder.hpp:110 SetMaps & map0M(const typename MapTypes< D, MTag >::fmap0_extraM &map0M) Definition: spec_fptrfinder.hpp:101 static const MapTypes< D, MTag >::fmap1W nullmap_it1W Definition: spec_fptrfinder.hpp:223 bool check_indices_2(const std::string &, const ITER &it, const int i, const int j, const int whichit) Definition: spec_fptrfinder.hpp:423 const MapTypes< D, MTag >::fmap1_extraM * map1M_ Definition: spec_fptrfinder.hpp:190 FptrFinder< HostSpec, MapTag::Set > * ff Definition: spec_fptrfinder.hpp:926 Class definitions for GAMBIT particle database. void check_index_initd(const std::string &origin, const int index, const std::string &label) Definition: spec_fptrfinder.hpp:350 static const MapTypes< D, MTag >::fmap2_extraI nullmap_it2I Definition: spec_fptrfinder.hpp:230 SetMaps & map0W(const typename MapTypes< D, MTag >::fmap0W &map0W) Definition: spec_fptrfinder.hpp:98 const HostSpec *const const_fakethis Definition: spec_fptrfinder.hpp:166 static const MapTypes< D, MTag >::fmap0W nullmap_it0W Definition: spec_fptrfinder.hpp:222 const MapTypes< D, MTag >::fmap2_extraM * map2M_ Definition: spec_fptrfinder.hpp:134 const MapTypes< D, MTag >::fmap0 * map0_ Maps from derived class. Definition: spec_fptrfinder.hpp:126 SetMaps(const std::string &label, const HostSpec *const fakethis) Version to deal with const host object. Definition: spec_fptrfinder.hpp:68 HostSpec::D DerivedSpec Definition: spec_fptrfinder.hpp:921 const MapTypes< D, MTag >::fmap2W * map2W_ Definition: spec_fptrfinder.hpp:131 const MapTypes< D, MTag >::fmap0W * map0W_ Definition: spec_fptrfinder.hpp:186 bool find_override_0index(const std::string &name) Search 0-index override map. Definition: spec_fptrfinder.hpp:455 bool find_override_1index(const std::string &name, const int i) Search 1-index override map. Definition: spec_fptrfinder.hpp:473 Helpers for using the spectrum and subspectrum classes. static const std::map< int, const std::string > error_msg Definition: spec_fptrfinder.hpp:265 FptrFinder< HostSpec, MapTag::Get > * ff Definition: spec_fptrfinder.hpp:783 CallFcn(FptrFinder< HostSpec, MapTag::Set > *host) Definition: spec_fptrfinder.hpp:929 SetMaps & override_only(const bool flag) Flag to permit searching only override maps. Definition: spec_fptrfinder.hpp:114 const std::map< std::string, double > * omap0_ Pointers to const maps to use for search Maps from base class (override maps, should only be used in ... Definition: spec_fptrfinder.hpp:179 |