Datum fmcs_mols(PG_FUNCTION_ARGS) { // elog(WARNING, "fmcs_mols() called. FINALFUNC"); void *lst = PG_GETARG_POINTER(0); // char t[256]; // sprintf(t,"lst=%p, fcinfo: %p, %p", lst, fcinfo->flinfo->fn_extra, // fcinfo->flinfo->fn_mcxt); // elog(WARNING, t); // char *params = PG_GETARG_CSTRING(1); char *str = findMCS(lst, NULL); // params); Assert(str != 0); int32 ts_size = VARHDRSZ + strlen(str); text *ts = (text *)palloc(ts_size); SET_VARSIZE(ts, ts_size); memcpy(VARDATA(ts), str, strlen(str)); PG_RETURN_TEXT_P(ts); }
MCSResult findMCS (const std::vector<ROMOL_SPTR>& mols, bool maximizeBonds, double threshold, unsigned timeout, bool verbose, bool matchValences, bool ringMatchesRingOnly, bool completeRingsOnly, AtomComparator atomComp, BondComparator bondComp){ MCSParameters *ps=new MCSParameters(); ps->MaximizeBonds=maximizeBonds; ps->Threshold=threshold; ps->Timeout=timeout; ps->Verbose=verbose; ps->AtomCompareParameters.MatchValences=matchValences; switch(atomComp) { case AtomCompareAny: ps->AtomTyper=MCSAtomCompareAny; break; case AtomCompareElements: ps->AtomTyper=MCSAtomCompareElements; break; case AtomCompareIsotopes: ps->AtomTyper=MCSAtomCompareIsotopes; break; } switch(bondComp) { case BondCompareAny: ps->BondTyper=MCSBondCompareAny; break; case BondCompareOrder: ps->BondTyper=MCSBondCompareOrder; break; case BondCompareOrderExact: ps->BondTyper=MCSBondCompareOrderExact; break; } ps->BondCompareParameters.RingMatchesRingOnly=ringMatchesRingOnly; ps->BondCompareParameters.CompleteRingsOnly=completeRingsOnly; MCSResult res=findMCS(mols,ps); delete ps; return res; }