@Override public IAtomContainer shallowCopy() { return new AtomContainer2(this); }
/** * {@inheritDoc} */ @Override public void addElectronContainer(IElectronContainer ec) { if (ec instanceof IBond) this.addBond((IBond) ec); if (ec instanceof ILonePair) this.addLonePair((ILonePair) ec); if (ec instanceof ISingleElectron) this.addSingleElectron((ISingleElectron) ec); notifyChanged(); }
/** * {@inheritDoc} */ @Override public void addBond(IBond bond) { ensureBondCapacity(numBonds + 1); final BaseBondRef bref = newBondRef(bond); bref.setIndex(numBonds); addToEndpoints(bref); bonds[numBonds++] = bref; bref.addListener(this); notifyChanged(); }
/** * {@inheritDoc} */ @Override public void removeAllBonds() { bonds = new BaseBondRef[0]; numBonds = 0; clearAdjacency(); notifyChanged(); }
clone.lonepairs = new ILonePair[0]; clone.stereo = new ArrayList<>(); clone.removeAllElements(); atoms[i] = this.atoms[i].deref().clone(); clone.setAtoms(atoms); for (int i = 0; i < atoms.length; i++) atomMap.put(this.atoms[i], clone.getAtom(i)); clone.setBonds(bonds); for (int i = 0; i < bonds.length; i++) bondMap.put(this.bonds[i], clone.getBond(i)); clone.addLonePair(pair); clone.addSingleElectron(electron); clone.addStereoElement(element.map(atomMap, bondMap)); Collection<Sgroup> sgroups = getProperty(CDKConstants.CTAB_SGROUPS); if (sgroups != null) { Map<IChemObject,IChemObject> replace = new HashMap<>(); replace.putAll(atomMap); replace.putAll(bondMap); clone.setProperty(CDKConstants.CTAB_SGROUPS, SgroupManipulator.copy(sgroups, replace));
for (IBond bond : that.bonds()) bond.setFlag(CDKConstants.VISITED, false); for (IAtom atom : this.atoms()) atom.setFlag(CDKConstants.VISITED, true); for (IBond bond : this.bonds()) bond.setFlag(CDKConstants.VISITED, true); if (se instanceof TetrahedralChirality && !((TetrahedralChirality) se).getChiralAtom().getFlag(CDKConstants.VISITED)) { this.addStereoElement(se); } else if (se instanceof DoubleBondStereochemistry && !((DoubleBondStereochemistry) se).getStereoBond().getFlag(CDKConstants.VISITED)) { this.addStereoElement(se); } else if (se instanceof ExtendedTetrahedral && !((ExtendedTetrahedral) se).focus().getFlag(CDKConstants.VISITED)) { this.addStereoElement(se); if (!atom.getFlag(CDKConstants.VISITED)) { atom.setFlag(CDKConstants.VISITED, true); addAtom(atom); if (!bond.getFlag(CDKConstants.VISITED)) { bond.setFlag(CDKConstants.VISITED, true); addBond(bond); if (this.indexOf(se) < 0) addSingleElectron(se); if (this.indexOf(lp) < 0)
/** * Constructs a shallow copy of the provided IAtomContainer with the same * atoms, bonds, electron containers and stereochemistry of another * AtomContainer. Removing atoms/bonds in this copy will not affect * the original, however changing the properties will. * * @param src the source atom container */ AtomContainer2(IAtomContainer src) { this(src.getAtomCount(), src.getBondCount(), src.getLonePairCount(), src.getSingleElectronCount()); for (IAtom atom : src.atoms()) addAtom(atom); for (IBond bond : src.bonds()) addBond(bond); for (ISingleElectron se : src.singleElectrons()) addSingleElectron(se); for (ILonePair lp : src.lonePairs()) addLonePair(lp); for (IStereoElement se : src.stereoElements()) addStereoElement(se); }
ensureAtomCapacity(newatoms.length); atoms[i] = newAtomRef(newatoms[i]); atoms[i].setIndex(i); atoms[i].addListener(this); clearAdjacency(); for (int i = 0; i < numBonds; i++) addToEndpoints(bonds[i]); notifyChanged();
/** * {@inheritDoc} */ @Override public void addLonePair(int idx) { ILonePair lp = getBuilder().newInstance(ILonePair.class); lp.setAtom(getAtom(idx)); addLonePair(lp); }
/** * {@inheritDoc} */ @Override public void addBond(int beg, int end, Order order, Stereo stereo) { IBond bond = getBuilder().newBond(); bond.setAtoms(new IAtom[]{getAtom(beg), getAtom(end)}); bond.setOrder(order); bond.setStereo(stereo); addBond(bond); }
/** * {@inheritDoc} */ @Override public void addSingleElectron(int idx) { ISingleElectron electron = getBuilder().newInstance(ISingleElectron.class); electron.setAtom(getAtom(idx)); addSingleElectron(electron); }
/** * {@inheritDoc} */ @Override public void addBond(int beg, int end, Order order) { addBond(beg, end, order, Stereo.NONE); }
clone.lonepairs = new ILonePair[0]; clone.stereo = new ArrayList<>(); clone.removeAllElements(); atoms[i] = this.atoms[i].deref().clone(); clone.setAtoms(atoms); for (int i = 0; i < atoms.length; i++) atomMap.put(this.atoms[i], clone.getAtom(i)); clone.setBonds(bonds); for (int i = 0; i < bonds.length; i++) bondMap.put(this.bonds[i], clone.getBond(i)); clone.addLonePair(pair); clone.addSingleElectron(electron); clone.addStereoElement(element.map(atomMap, bondMap)); Collection<Sgroup> sgroups = getProperty(CDKConstants.CTAB_SGROUPS); if (sgroups != null) { Map<IChemObject,IChemObject> replace = new HashMap<>(); replace.putAll(atomMap); replace.putAll(bondMap); clone.setProperty(CDKConstants.CTAB_SGROUPS, SgroupManipulator.copy(sgroups, replace));
for (IBond bond : that.bonds()) bond.setFlag(CDKConstants.VISITED, false); for (IAtom atom : this.atoms()) atom.setFlag(CDKConstants.VISITED, true); for (IBond bond : this.bonds()) bond.setFlag(CDKConstants.VISITED, true); if (se instanceof TetrahedralChirality && !((TetrahedralChirality) se).getChiralAtom().getFlag(CDKConstants.VISITED)) { this.addStereoElement(se); } else if (se instanceof DoubleBondStereochemistry && !((DoubleBondStereochemistry) se).getStereoBond().getFlag(CDKConstants.VISITED)) { this.addStereoElement(se); } else if (se instanceof ExtendedTetrahedral && !((ExtendedTetrahedral) se).focus().getFlag(CDKConstants.VISITED)) { this.addStereoElement(se); if (!atom.getFlag(CDKConstants.VISITED)) { atom.setFlag(CDKConstants.VISITED, true); addAtom(atom); if (!bond.getFlag(CDKConstants.VISITED)) { bond.setFlag(CDKConstants.VISITED, true); addBond(bond); if (this.indexOf(se) < 0) addSingleElectron(se); if (this.indexOf(lp) < 0)
/** * Constructs a shallow copy of the provided IAtomContainer with the same * atoms, bonds, electron containers and stereochemistry of another * AtomContainer. Removing atoms/bonds in this copy will not affect * the original, however changing the properties will. * * @param src the source atom container */ AtomContainer2(IAtomContainer src) { this(src.getAtomCount(), src.getBondCount(), src.getLonePairCount(), src.getSingleElectronCount()); for (IAtom atom : src.atoms()) addAtom(atom); for (IBond bond : src.bonds()) addBond(bond); for (ISingleElectron se : src.singleElectrons()) addSingleElectron(se); for (ILonePair lp : src.lonePairs()) addLonePair(lp); for (IStereoElement se : src.stereoElements()) addStereoElement(se); }
ensureAtomCapacity(newatoms.length); atoms[i] = newAtomRef(newatoms[i]); atoms[i].setIndex(i); atoms[i].addListener(this); clearAdjacency(); for (int i = 0; i < numBonds; i++) addToEndpoints(bonds[i]); notifyChanged();
/** * {@inheritDoc} */ @Override public void addLonePair(int idx) { ILonePair lp = getBuilder().newInstance(ILonePair.class); lp.setAtom(getAtom(idx)); addLonePair(lp); }
/** * {@inheritDoc} */ @Override public void addBond(int beg, int end, Order order, Stereo stereo) { IBond bond = getBuilder().newBond(); bond.setAtoms(new IAtom[]{getAtom(beg), getAtom(end)}); bond.setOrder(order); bond.setStereo(stereo); addBond(bond); }
/** * {@inheritDoc} */ @Override public void addSingleElectron(int idx) { ISingleElectron electron = getBuilder().newInstance(ISingleElectron.class); electron.setAtom(getAtom(idx)); addSingleElectron(electron); }
/** * {@inheritDoc} */ @Override public void removeAllBonds() { bonds = new BaseBondRef[0]; numBonds = 0; clearAdjacency(); notifyChanged(); }