⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atomcontainerset.java

📁 化学图形处理软件
💻 JAVA
字号:
/*  $Revision: 7037 $ $Author: egonw $ $Date: 2006-09-24 11:13:13 +0200 (Sun, 24 Sep 2006) $ * *  Copyright (C) 2003-2007  Christoph Steinbeck <steinbeck@users.sf.net> * *  Contact: cdk-devel@lists.sourceforge.net * *  This program is free software; you can redistribute it and/or *  modify it under the terms of the GNU Lesser General Public License *  as published by the Free Software Foundation; either version 2.1 *  of the License, or (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU Lesser General Public License for more details. * *  You should have received a copy of the GNU Lesser General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */package org.openscience.cdk;import java.io.Serializable;import org.openscience.cdk.interfaces.IAtomContainer;import org.openscience.cdk.interfaces.IChemObjectChangeEvent;import org.openscience.cdk.interfaces.IChemObjectListener;import org.openscience.cdk.interfaces.IAtomContainerSet;/** * A set of AtomContainers. * * @author        hel * @cdk.module    data */public class AtomContainerSet extends ChemObject implements Serializable, IAtomContainerSet, IChemObjectListener, Cloneable {	/**     * Determines if a de-serialized object is compatible with this class.     *     * This value must only be changed if and only if the new version     * of this class is incompatible with the old version. See Sun docs     * for <a href=http://java.sun.com/products/jdk/1.1/docs/guide/serialization/spec/version.doc.html>details</a>.	 */	private static final long serialVersionUID = -521290255592768395L;	/**  Array of AtomContainers. */	protected org.openscience.cdk.interfaces.IAtomContainer[] atomContainers;	/**  Number of AtomContainers contained by this container. */	protected int atomContainerCount;	/**	 * Defines the number of instances of a certain molecule	 * in the set. It is 1 by default.	 */	protected double[] multipliers;	/**	 *  Amount by which the AtomContainers array grows when elements are added and	 *  the array is not large enough for that.	 */	protected int growArraySize = 5;	/**  Constructs an empty AtomContainerSet. */	public AtomContainerSet() {		atomContainerCount = 0;		atomContainers = new AtomContainer[growArraySize];		multipliers = new double[growArraySize];	}	/**	 * Adds an atomContainer to this container.	 *	 * @param  atomContainer  The atomContainer to be added to this container	 */	public void addAtomContainer(org.openscience.cdk.interfaces.IAtomContainer atomContainer) {		atomContainer.addListener(this);		addAtomContainer(atomContainer, 1.0);		/*		 *  notifyChanged is called below		 */	}	/**	 * Removes an AtomContainer from this container.	 *	 * @param  atomContainer  The atomContainer to be removed from this container	 */	public void removeAtomContainer(org.openscience.cdk.interfaces.IAtomContainer atomContainer) {		for (int i = 0; i < atomContainerCount; i++) {			if (atomContainers[i] == atomContainer)				removeAtomContainer(i);		}	}	/**	 * Removes all AtomContainer from this container.	 */	public void removeAllAtomContainers() {		for (int pos = atomContainerCount - 1; pos >= 0; pos--)		{			atomContainers[pos].removeListener(this);			multipliers[pos] = 0;			atomContainers[pos] = null;		}		atomContainerCount = 0;		notifyChanged();	}			/**	 * Removes an AtomContainer from this container.	 *	 * @param  pos  The position of the AtomContainer to be removed from this container	 */	public void removeAtomContainer(int pos) {		atomContainers[pos].removeListener(this);		for (int i = pos; i < atomContainerCount - 1; i++) {			atomContainers[i] = atomContainers[i + 1];			multipliers[i] = multipliers[i + 1];		}		atomContainers[atomContainerCount - 1] = null;		atomContainerCount--;		notifyChanged();	}	/**	 * Replace the AtomContainer at a specific position (array has to be large enough).	 * 	 * @param position   position in array for AtomContainer	 * @param container  the replacement AtomContainer	 */	public void replaceAtomContainer(int position, IAtomContainer container) {		IAtomContainer old = atomContainers[position];		old.removeListener(this);		atomContainers[position] = container;		container.addListener(this);		notifyChanged();	}		/**	 * Sets the coefficient of a AtomContainer to a given value.	 *	 * @param  container   The AtomContainer for which the multiplier is set	 * @param  multiplier  The new multiplier for the AtomContatiner	 * @return             true if multiplier has been set	 * @see                #getMultiplier(IAtomContainer)	 */	public boolean setMultiplier(org.openscience.cdk.interfaces.IAtomContainer container, double multiplier) {		for (int i = 0; i < atomContainers.length; i++) {			if (atomContainers[i] == container) {				multipliers[i] = multiplier;				notifyChanged();				return true;			}		}		return false;	}	/**	 * Sets the coefficient of a AtomContainer to a given value.	 *	 * @param  position    The position of the AtomContainer for which the multiplier is	 *                    set in [0,..]	 * @param  multiplier  The new multiplier for the AtomContatiner at	 *                    <code>position</code>	 * @see                #getMultiplier(int)	 */	public void setMultiplier(int position, double multiplier) {		multipliers[position] = multiplier;		notifyChanged();	}	/**	 * Returns an array of double with the stoichiometric coefficients	 * of the products.	 *	 * @return    The multipliers for the AtomContainer's in this set	 * @see       #setMultipliers	 */	public double[] getMultipliers() {		double[] returnArray = new double[this.atomContainerCount];		System.arraycopy(this.multipliers, 0, returnArray, 0, this.atomContainerCount);		return returnArray;	}	/**	 * Sets the multipliers of the AtomContainers.	 *	 * @param  newMultipliers  The new multipliers for the AtomContainers in this set	 * @return                 true if multipliers have been set.	 * @see                    #getMultipliers	 */	public boolean setMultipliers(double[] newMultipliers) {		if (newMultipliers.length == atomContainerCount) {			System.arraycopy(newMultipliers, 0, multipliers, 0, atomContainerCount);			notifyChanged();			return true;		}		return false;	}	/**	 * Adds an atomContainer to this container with the given	 * multiplier.	 *	 * @param  atomContainer  The atomContainer to be added to this container	 * @param  multiplier     The multiplier of this atomContainer	 */	public void addAtomContainer(org.openscience.cdk.interfaces.IAtomContainer atomContainer, double multiplier) {		if (atomContainerCount + 1 >= atomContainers.length) {			growAtomContainerArray();		}		atomContainer.addListener(this);		atomContainers[atomContainerCount] = atomContainer;		multipliers[atomContainerCount] = multiplier;		atomContainerCount++;		notifyChanged();	}	/**	 *  Adds all atomContainers in the AtomContainerSet to this container.	 *	 * @param  atomContainerSet  The AtomContainerSet	 */	public void add(org.openscience.cdk.interfaces.IAtomContainerSet atomContainerSet) {		for (java.util.Iterator iter = atomContainerSet.atomContainers();iter.hasNext();) {			addAtomContainer((IAtomContainer)iter.next());		}		/*		 *  notifyChanged() is called by addAtomContainer()		 */	}	/**	 *  Get an iterator for this AtomContainerSet.     *      * @return A new Iterator for this AtomContainerSet.	 */	public java.util.Iterator atomContainers() {		return new AtomContainerIterator();	}	/**     * The inner Iterator class.     *     */	private class AtomContainerIterator implements java.util.Iterator {		private int pointer = 0;    	        public boolean hasNext() {            if (pointer < atomContainerCount) return true;	    return false;        }        public Object next() {            //++pointer;            return atomContainers[pointer++];        }        public void remove() {            removeAtomContainer(--pointer);        }	}		/**	 * Returns the AtomContainer at position <code>number</code> in the	 * container.	 *	 * @param  number  The position of the AtomContainer to be returned.	 * @return         The AtomContainer at position <code>number</code> .	 */	public org.openscience.cdk.interfaces.IAtomContainer getAtomContainer(int number) {		return (AtomContainer)atomContainers[number];	}	/**	 * Returns the multiplier for the AtomContainer at position <code>number</code> in the	 * container.	 *	 * @param  number  The position of the multiplier of the AtomContainer to be returned.	 * @return         The multiplier for the AtomContainer at position <code>number</code> .	 * @see            #setMultiplier(int, double)	 */	public double getMultiplier(int number) {		return multipliers[number];	}	/**	 * Returns the multiplier of the given AtomContainer.	 *	 * @param  container  The AtomContainer for which the multiplier is given	 * @return            -1, if the given molecule is not a container in this set	 * @see               #setMultiplier(IAtomContainer, double)	 */	public double getMultiplier(org.openscience.cdk.interfaces.IAtomContainer container) {		for (int i = 0; i < atomContainerCount; i++) {			if (atomContainers[i].equals(container)) {				return multipliers[i];			}		}		return -1.0;	}	/**	 *  Grows the atomContainer array by a given size.	 *	 * @see    growArraySize	 */	protected void growAtomContainerArray() {		growArraySize = atomContainers.length;		AtomContainer[] newatomContainers = new AtomContainer[atomContainers.length + growArraySize];		System.arraycopy(atomContainers, 0, newatomContainers, 0, atomContainers.length);		atomContainers = newatomContainers;		double[] newMultipliers = new double[multipliers.length + growArraySize];		System.arraycopy(multipliers, 0, newMultipliers, 0, multipliers.length);		multipliers = newMultipliers;	}	/**	 * Returns the number of AtomContainers in this Container.	 *	 * @return    The number of AtomContainers in this Container	 */	public int getAtomContainerCount() {		return this.atomContainerCount;	}	/**	 * Returns the String representation of this AtomContainerSet.	 *	 * @return    The String representation of this AtomContainerSet	 */	public String toString() {		StringBuffer buffer = new StringBuffer(32);		buffer.append("AtomContainerSet(");		buffer.append(this.hashCode());		buffer.append(", M=").append(getAtomContainerCount()).append(", ");		for (int i = 0; i < atomContainerCount; i++) {			buffer.append(atomContainers[i].toString());			if (i < atomContainerCount - 1) {				buffer.append(", ");			}		}		buffer.append(')');		return buffer.toString();	}	/**	 *  Clones this AtomContainerSet and its content.	 *	 * @return    the cloned Object	 */	public Object clone() throws CloneNotSupportedException {		AtomContainerSet clone = (AtomContainerSet)super.clone();		for (int i = 0; i < atomContainerCount; i++) {			clone.addAtomContainer((IAtomContainer)atomContainers[i].clone(), 1.0);		}		return (Object) clone;	}	/**	 *  Called by objects to which this object has	 *  registered as a listener.	 *	 * @param  event  A change event pointing to the source of the change	 */	public void stateChanged(IChemObjectChangeEvent event) {		notifyChanged(event);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -