00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OB_MOLECULEFORMAT_H
00020 #define OB_MOLECULEFORMAT_H
00021
00022 #ifdef _MSC_VER
00023 #include <hash_map>
00024 #endif
00025
00026 #include <openbabel/mol.h>
00027 #include <openbabel/babelconfig.h>
00028 #include <openbabel/obconversion.h>
00029 #include <typeinfo>
00030
00031 namespace OpenBabel {
00032
00033
00034
00035 #ifndef OBCOMMON
00036 #define OBCOMMON
00037 #endif
00038
00052 class OBCOMMON OBMoleculeFormat : public OBFormat
00053 {
00054 private:
00055 static bool OptionsRegistered;
00056 static std::map<std::string, OBMol*> IMols;
00057 static OBMol* _jmol;
00058 static std::vector<OBMol> MolArray;
00059 static bool StoredMolsReady;
00060
00061 public:
00062
00063 OBMoleculeFormat()
00064 {
00065 if(!OptionsRegistered)
00066 {
00067 OptionsRegistered=true;
00068 OBConversion::RegisterOptionParam("b", this, 0, OBConversion::INOPTIONS);
00069 OBConversion::RegisterOptionParam("s", this, 0, OBConversion::INOPTIONS);
00070 OBConversion::RegisterOptionParam("title", this, 1,OBConversion::GENOPTIONS);
00071 OBConversion::RegisterOptionParam("addtotitle", this, 1,OBConversion::GENOPTIONS);
00072 OBConversion::RegisterOptionParam("property", this, 2, OBConversion::GENOPTIONS);
00073 OBConversion::RegisterOptionParam("C", this, 0,OBConversion::GENOPTIONS);
00074 OBConversion::RegisterOptionParam("j", this, 0,OBConversion::GENOPTIONS);
00075 OBConversion::RegisterOptionParam("join", this, 0,OBConversion::GENOPTIONS);
00076 OBConversion::RegisterOptionParam("separate", this, 0,OBConversion::GENOPTIONS);
00077
00078
00079
00080
00081
00082 OBConversion::RegisterOptionParam("s", NULL, 1,OBConversion::GENOPTIONS);
00083 OBConversion::RegisterOptionParam("v", NULL, 1,OBConversion::GENOPTIONS);
00084 OBConversion::RegisterOptionParam("h", NULL, 0,OBConversion::GENOPTIONS);
00085 OBConversion::RegisterOptionParam("d", NULL, 0,OBConversion::GENOPTIONS);
00086 OBConversion::RegisterOptionParam("b", NULL, 0,OBConversion::GENOPTIONS);
00087 OBConversion::RegisterOptionParam("c", NULL, 0,OBConversion::GENOPTIONS);
00088 OBConversion::RegisterOptionParam("p", NULL, 0,OBConversion::GENOPTIONS);
00089 OBConversion::RegisterOptionParam("t", NULL, 0,OBConversion::GENOPTIONS);
00090 OBConversion::RegisterOptionParam("k", NULL, 0,OBConversion::GENOPTIONS);
00091 OBConversion::RegisterOptionParam("filter", NULL, 1,OBConversion::GENOPTIONS);
00092 OBConversion::RegisterOptionParam("add", NULL, 1,OBConversion::GENOPTIONS);
00093 OBConversion::RegisterOptionParam("delete", NULL, 1,OBConversion::GENOPTIONS);
00094 OBConversion::RegisterOptionParam("append", NULL, 1,OBConversion::GENOPTIONS);
00095 }
00096 }
00097
00099 static bool ReadChemObjectImpl(OBConversion* pConv, OBFormat*);
00101 static bool WriteChemObjectImpl(OBConversion* pConv, OBFormat*);
00102
00104 virtual bool ReadChemObject(OBConversion* pConv)
00105 { return ReadChemObjectImpl(pConv, this);}
00106
00108 virtual bool WriteChemObject(OBConversion* pConv)
00109 { return WriteChemObjectImpl(pConv, this);}
00110
00112
00113
00114
00115 static bool DeferMolOutput(OBMol* pmol, OBConversion* pConv, OBFormat* pF);
00117 static bool OutputDeferredMols(OBConversion* pConv);
00119 static bool DeleteDeferredMols();
00121 static OBMol* MakeCombinedMolecule(OBMol* pFirst, OBMol* pSecond);
00123
00124 #ifdef _MSC_VER
00125 typedef stdext::hash_map<std::string, unsigned> NameIndexType;
00126 #else
00127 typedef std::map<std::string, unsigned> NameIndexType;
00128 #endif
00129
00130
00131 static bool ReadNameIndex(NameIndexType& index, const std::string& datafilename,
00132 OBFormat* pInFormat);
00133
00135 const std::type_info& GetType()
00136 {
00137 return typeid(OBMol*);
00138 }
00140
00141 };
00142
00143 }
00144 #endif //OB_MOLECULEFORMAT_H
00145