Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages

SmallRing.h

Go to the documentation of this file.
00001 /***************************************************************************
00002 *cr 
00003 *cr (C) Copyright 1995-2019 The Board of Trustees of the 
00004 *cr University of Illinois 
00005 *cr All Rights Reserved 
00006 *cr 
00007 ***************************************************************************/
00008 
00009 /***************************************************************************
00010 * RCS INFORMATION:
00011 *
00012 * $RCSfile: SmallRing.h,v $
00013 * $Author: johns $ $Locker: $ $State: Exp $
00014 * $Revision: 1.12 $ $Date: 2020年10月28日 15:09:57 $
00015 *
00016 ***************************************************************************
00017 * DESCRIPTION:
00018 * A SmallRing contains an ordered list of atoms which are connected
00019 * to each other to form a loop. The atom numbers are the
00020 * unique atom numbers as used in BaseMolecule. The ordering of
00021 * the atoms, in addition to specifying how the atoms in the ring are
00022 * connected, also gives the orientation (handedness) of the ring.
00023 *
00024 ***************************************************************************/
00025 #ifndef SMALLRING_H
00026 #define SMALLRING_H
00027 
00028 #include "ResizeArray.h"
00029 #include "Inform.h"
00030 
00037 class SmallRing {
00038 public:
00039 ResizeArray<int> atoms;
00040 short int orientated;
00041 
00042 SmallRing(void) : atoms(1), orientated(0) {}
00043 
00044 int num(void) { return int(atoms.num()); }
00045 int operator [](int i) { return atoms[i]; }
00046 void append(int i) { atoms.append(i); }
00047 
00048 int last_atom(void) { return atoms[atoms.num()-1]; }
00049 int first_atom(void) { return atoms[0]; }
00050 int closed(void) { return first_atom() == last_atom(); }
00051 void remove_last(void) { atoms.truncatelastn(1); }
00052 
00053 void reverse(void) {
00054 ResizeArray<int> atomscopy(atoms.num());
00055 int i, len;
00056 len = int(atoms.num());
00057 
00058 for (i=0;i<len;i++) atomscopy.append(atoms[i]);
00059 atoms.clear();
00060 for (i=len-1;i>=0;i--) atoms.append(atomscopy[i]);
00061 }
00062 
00063 void clear(void) {
00064 atoms.clear();
00065 orientated = 0;
00066 }
00067 
00068 SmallRing* copy(void) {
00069 SmallRing *ringcopy;
00070 int i, len;
00071 
00072 ringcopy = new SmallRing();
00073 len = num();
00074 for (i=0; i < len; i++) ringcopy->append(atoms[i]);
00075 ringcopy->orientated = orientated;
00076 
00077 return ringcopy;
00078 }
00079 
00080 friend Inform& operator << (Inform &os, SmallRing &sr) {
00081 int i, len;
00082 len = sr.num();
00083 
00084 for (i=0; i < len; i++) {
00085 os << sr[i];
00086 if (i == len-1) break;
00087 os << ", ";
00088 }
00089 
00090 return os;
00091 }
00092 
00093 };
00094 
00095 #endif

Generated on Tue Nov 18 02:48:05 2025 for VMD (current) by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002

AltStyle によって変換されたページ (->オリジナル) /