[Redirected to the list because the question is of general interest] Hi Evgueni,
On Wed, Mar 25, 2009 at 10:56 AM, Evgueni Kolossov <[email protected]> wrote: > > Got some problems with looping over an atom's bonds when I need to compare > (see below): > > double CRDKitDescriptor::GetEdgeDegree(RDKit::Bond * Bond_in, bool > bWeighted) const > { > double dRtn = 0.0; > RDKit::ROMol::OEDGE_ITER beg,end; > RDKit::ROMol mol = Bond_in->getOwningMol(); > //OLD CODE// RDKit::ROMol::GRAPH_MOL_BOND_PMAP::type pMap = > mol.getBondPMap(); > > // Take two atoms involved in this bond. > RDKit::Atom *pAtom[2] = { Bond_in->getBeginAtom(), > Bond_in->getEndAtom() }; > for (int i=0; i < 2; i++) > { > // Add degrees of other bonds (not connected to H) on this > atom. > boost::tie(beg,end) = mol.getAtomBonds(pAtom[i]); > while(beg!=end) > { > //OLD CODE// RDKit::Bond *pCurrentBond = > pMap[*beg]; > //NEW CODE// RDKit::BOND_SPTR pCurrentBond = > (mol)[*beg]; > //NOW I have RDKit::Bond pointer and RDKit::BOND_SPTR instead of 2 > RDKit::Bond pointers > //and how I am going to compare them? > if (pCurrentBond != Bond_in > && > pCurrentBond->getOtherAtom(pAtom[i])->getAtomicNum() != 1)//not 'H' and not > the same bond > { > // Bond contributes its weight, or 1 if > we're not considering weights. > dRtn += bWeighted ? GetBondWeight(pCurrentBond) : 1.0; > } > ++beg; > } > } > return dRtn; > } > Can you help please!!! Indeed, I can. A BOND_SPTR is a boost shared pointer that contains a Bond *. To get the Bond * itself, you call the shared pointer's get() method. Something like this: if (pCurrentBond.get() != Bond_in) Best Regards, -greg

