diff --git a/scripts/perl/openbabel_perl.cpp b/scripts/perl/openbabel_perl.cpp
index 129f0111f..ede08615e 100644
--- a/scripts/perl/openbabel_perl.cpp
+++ b/scripts/perl/openbabel_perl.cpp
@@ -20268,35 +20268,37 @@ XS(_wrap_OBBase_HasData__SWIG_0) {
bool result;
void *argp1 = 0 ;
int res1 = 0 ;
- void *argp2 = 0 ;
- int res2 = 0 ;
+ int res2 = SWIG_OLDOBJ ;
int argvi = 0;
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: OBBase_HasData(self,std::string &);");
+ SWIG_croak("Usage: OBBase_HasData(self,std::string const &);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_OpenBabel__OBBase, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OBBase_HasData" "', argument " "1"" of type '" "OpenBabel::OBBase *""'");
}
arg1 = reinterpret_cast< OpenBabel::OBBase * >(argp1);
- res2 = SWIG_ConvertPtr(ST(1), &argp2, SWIGTYPE_p_std__string, 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "OBBase_HasData" "', argument " "2"" of type '" "std::string &""'");
+ {
+ std::string *ptr = (std::string *)0;
+ res2 = SWIG_AsPtr_std_string SWIG_PERL_CALL_ARGS_2(ST(1), &ptr);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "OBBase_HasData" "', argument " "2"" of type '" "std::string const &""'");
+ }
+ if (!ptr) {
+ SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "OBBase_HasData" "', argument " "2"" of type '" "std::string const &""'");
+ }
+ arg2 = ptr;
}
- if (!argp2) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "OBBase_HasData" "', argument " "2"" of type '" "std::string &""'");
- }
- arg2 = reinterpret_cast< std::string * >(argp2);
- result = (bool)(arg1)->HasData(*arg2);
+ result = (bool)(arg1)->HasData((std::string const &)*arg2);
ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
-
+ if (SWIG_IsNewObj(res2)) delete arg2;
XSRETURN(argvi);
fail:
-
+ if (SWIG_IsNewObj(res2)) delete arg2;
SWIG_croak_null();
}
}
@@ -20400,9 +20402,10 @@ XS(_wrap_OBBase_HasData) {
_rankm += _pi;
_pi *= SWIG_MAXCASTRANK;
{
- void *vptr = 0;
- int res = SWIG_ConvertPtr(ST(1), &vptr, SWIGTYPE_p_std__string, 0);
- _v = SWIG_CheckState(res);
+ {
+ int res = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL);
+ _v = SWIG_CheckState(res);
+ }
}
if (!_v) goto check_1;
_ranki += _v*_pi;
@@ -20430,10 +20433,8 @@ XS(_wrap_OBBase_HasData) {
_rankm += _pi;
_pi *= SWIG_MAXCASTRANK;
{
- {
- int res = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL);
- _v = SWIG_CheckState(res);
- }
+ int res = SWIG_AsPtr_std_string SWIG_PERL_CALL_ARGS_2(ST(1), (std::string**)(0));
+ _v = SWIG_CheckState(res);
}
if (!_v) goto check_2;
_ranki += _v*_pi;
@@ -20478,9 +20479,9 @@ XS(_wrap_OBBase_HasData) {
dispatch:
switch(_index) {
case 1:
- ++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_HasData__SWIG_0); return;
- case 2:
++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_HasData__SWIG_2); return;
+ case 2:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_HasData__SWIG_0); return;
case 3:
++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_HasData__SWIG_1); return;
}
@@ -20769,10 +20770,10 @@ XS(_wrap_OBBase_DataSize) {
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_OpenBabel__OBBase, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OBBase_DataSize" "', argument " "1"" of type '" "OpenBabel::OBBase *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OBBase_DataSize" "', argument " "1"" of type '" "OpenBabel::OBBase const *""'");
}
arg1 = reinterpret_cast< OpenBabel::OBBase * >(argp1);
- result = (unsigned int)(arg1)->DataSize();
+ result = (unsigned int)((OpenBabel::OBBase const *)arg1)->DataSize();
ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1(static_cast< unsigned int >(result)); argvi++ ;
XSRETURN(argvi);
@@ -20828,35 +20829,37 @@ XS(_wrap_OBBase_GetData__SWIG_1) {
OpenBabel::OBGenericData *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- void *argp2 = 0 ;
- int res2 = 0 ;
+ int res2 = SWIG_OLDOBJ ;
int argvi = 0;
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: OBBase_GetData(self,std::string &);");
+ SWIG_croak("Usage: OBBase_GetData(self,std::string const &);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_OpenBabel__OBBase, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OBBase_GetData" "', argument " "1"" of type '" "OpenBabel::OBBase *""'");
}
arg1 = reinterpret_cast< OpenBabel::OBBase * >(argp1);
- res2 = SWIG_ConvertPtr(ST(1), &argp2, SWIGTYPE_p_std__string, 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "OBBase_GetData" "', argument " "2"" of type '" "std::string &""'");
+ {
+ std::string *ptr = (std::string *)0;
+ res2 = SWIG_AsPtr_std_string SWIG_PERL_CALL_ARGS_2(ST(1), &ptr);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "OBBase_GetData" "', argument " "2"" of type '" "std::string const &""'");
+ }
+ if (!ptr) {
+ SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "OBBase_GetData" "', argument " "2"" of type '" "std::string const &""'");
+ }
+ arg2 = ptr;
}
- if (!argp2) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "OBBase_GetData" "', argument " "2"" of type '" "std::string &""'");
- }
- arg2 = reinterpret_cast< std::string * >(argp2);
- result = (OpenBabel::OBGenericData *)(arg1)->GetData(*arg2);
+ result = (OpenBabel::OBGenericData *)(arg1)->GetData((std::string const &)*arg2);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_OpenBabel__OBGenericData, 0 | SWIG_SHADOW); argvi++ ;
-
+ if (SWIG_IsNewObj(res2)) delete arg2;
XSRETURN(argvi);
fail:
-
+ if (SWIG_IsNewObj(res2)) delete arg2;
SWIG_croak_null();
}
}
@@ -20974,9 +20977,10 @@ XS(_wrap_OBBase_GetData) {
_rankm += _pi;
_pi *= SWIG_MAXCASTRANK;
{
- void *vptr = 0;
- int res = SWIG_ConvertPtr(ST(1), &vptr, SWIGTYPE_p_std__string, 0);
- _v = SWIG_CheckState(res);
+ {
+ int res = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL);
+ _v = SWIG_CheckState(res);
+ }
}
if (!_v) goto check_2;
_ranki += _v*_pi;
@@ -21004,10 +21008,8 @@ XS(_wrap_OBBase_GetData) {
_rankm += _pi;
_pi *= SWIG_MAXCASTRANK;
{
- {
- int res = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), NULL);
- _v = SWIG_CheckState(res);
- }
+ int res = SWIG_AsPtr_std_string SWIG_PERL_CALL_ARGS_2(ST(1), (std::string**)(0));
+ _v = SWIG_CheckState(res);
}
if (!_v) goto check_3;
_ranki += _v*_pi;
@@ -21054,9 +21056,9 @@ XS(_wrap_OBBase_GetData) {
case 1:
++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_GetData__SWIG_3); return;
case 2:
- ++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_GetData__SWIG_1); return;
- case 3:
++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_GetData__SWIG_0); return;
+ case 3:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_GetData__SWIG_1); return;
case 4:
++PL_markstack_ptr; SWIG_CALLXS(_wrap_OBBase_GetData__SWIG_2); return;
}
@@ -28016,7 +28018,7 @@ XS(_wrap_OBResidue_GetBonds__SWIG_0) {
dXSARGS;
if ((items < 2) || (items > 2)) {
- SWIG_croak("Usage: OBResidue_GetBonds(self,bool);");
+ SWIG_croak("Usage: OBResidue_GetBonds(self,exterior);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_OpenBabel__OBResidue, 0 | 0 );
if (!SWIG_IsOK(res1)) {
diff --git a/scripts/python/openbabel_python.cpp b/scripts/python/openbabel_python.cpp
index ae6416567..66faeefa7 100644
--- a/scripts/python/openbabel_python.cpp
+++ b/scripts/python/openbabel_python.cpp
@@ -30922,8 +30922,7 @@ SWIGINTERN PyObject *_wrap_OBBase_HasData__SWIG_0(PyObject *SWIGUNUSEDPARM(self)
bool result;
void *argp1 = 0 ;
int res1 = 0 ;
- void *argp2 = 0 ;
- int res2 = 0 ;
+ int res2 = SWIG_OLDOBJ ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
@@ -30933,18 +30932,23 @@ SWIGINTERN PyObject *_wrap_OBBase_HasData__SWIG_0(PyObject *SWIGUNUSEDPARM(self)
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OBBase_HasData" "', argument " "1"" of type '" "OpenBabel::OBBase *""'");
}
arg1 = reinterpret_cast< OpenBabel::OBBase * >(argp1);
- res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__string, 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "OBBase_HasData" "', argument " "2"" of type '" "std::string &""'");
+ {
+ std::string *ptr = (std::string *)0;
+ res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "OBBase_HasData" "', argument " "2"" of type '" "std::string const &""'");
+ }
+ if (!ptr) {
+ SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "OBBase_HasData" "', argument " "2"" of type '" "std::string const &""'");
+ }
+ arg2 = ptr;
}
- if (!argp2) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "OBBase_HasData" "', argument " "2"" of type '" "std::string &""'");
- }
- arg2 = reinterpret_cast< std::string * >(argp2);
- result = (bool)(arg1)->HasData(*arg2);
+ result = (bool)(arg1)->HasData((std::string const &)*arg2);
resultobj = SWIG_From_bool(static_cast< bool >(result));
+ if (SWIG_IsNewObj(res2)) delete arg2;
return resultobj;
fail:
+ if (SWIG_IsNewObj(res2)) delete arg2;
return NULL;
}
@@ -31030,11 +31034,12 @@ SWIGINTERN PyObject *_wrap_OBBase_HasData(PyObject *self, PyObject *args) {
int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_OpenBabel__OBBase, 0);
_v = SWIG_CheckState(res);
if (_v) {
- void *vptr = 0;
- int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_std__string, 0);
- _v = SWIG_CheckState(res);
+ {
+ int res = SWIG_AsVal_unsigned_SS_int(argv[1], NULL);
+ _v = SWIG_CheckState(res);
+ }
if (_v) {
- return _wrap_OBBase_HasData__SWIG_0(self, args);
+ return _wrap_OBBase_HasData__SWIG_2(self, args);
}
}
}
@@ -31044,12 +31049,10 @@ SWIGINTERN PyObject *_wrap_OBBase_HasData(PyObject *self, PyObject *args) {
int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_OpenBabel__OBBase, 0);
_v = SWIG_CheckState(res);
if (_v) {
- {
- int res = SWIG_AsVal_unsigned_SS_int(argv[1], NULL);
- _v = SWIG_CheckState(res);
- }
+ int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
+ _v = SWIG_CheckState(res);
if (_v) {
- return _wrap_OBBase_HasData__SWIG_2(self, args);
+ return _wrap_OBBase_HasData__SWIG_0(self, args);
}
}
}
@@ -31267,10 +31270,10 @@ SWIGINTERN PyObject *_wrap_OBBase_DataSize(PyObject *SWIGUNUSEDPARM(self), PyObj
if(!PyArg_UnpackTuple(args,(char *)"OBBase_DataSize",1,1,&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_OpenBabel__OBBase, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OBBase_DataSize" "', argument " "1"" of type '" "OpenBabel::OBBase *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OBBase_DataSize" "', argument " "1"" of type '" "OpenBabel::OBBase const *""'");
}
arg1 = reinterpret_cast< OpenBabel::OBBase * >(argp1);
- result = (unsigned int)(arg1)->DataSize();
+ result = (unsigned int)((OpenBabel::OBBase const *)arg1)->DataSize();
resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
return resultobj;
fail:
@@ -31316,8 +31319,7 @@ SWIGINTERN PyObject *_wrap_OBBase_GetData__SWIG_1(PyObject *SWIGUNUSEDPARM(self)
OpenBabel::OBGenericData *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- void *argp2 = 0 ;
- int res2 = 0 ;
+ int res2 = SWIG_OLDOBJ ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
@@ -31327,18 +31329,23 @@ SWIGINTERN PyObject *_wrap_OBBase_GetData__SWIG_1(PyObject *SWIGUNUSEDPARM(self)
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OBBase_GetData" "', argument " "1"" of type '" "OpenBabel::OBBase *""'");
}
arg1 = reinterpret_cast< OpenBabel::OBBase * >(argp1);
- res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__string, 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "OBBase_GetData" "', argument " "2"" of type '" "std::string &""'");
+ {
+ std::string *ptr = (std::string *)0;
+ res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "OBBase_GetData" "', argument " "2"" of type '" "std::string const &""'");
+ }
+ if (!ptr) {
+ SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "OBBase_GetData" "', argument " "2"" of type '" "std::string const &""'");
+ }
+ arg2 = ptr;
}
- if (!argp2) {
- SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "OBBase_GetData" "', argument " "2"" of type '" "std::string &""'");
- }
- arg2 = reinterpret_cast< std::string * >(argp2);
- result = (OpenBabel::OBGenericData *)(arg1)->GetData(*arg2);
+ result = (OpenBabel::OBGenericData *)(arg1)->GetData((std::string const &)*arg2);
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_OpenBabel__OBGenericData, 0 | 0 );
+ if (SWIG_IsNewObj(res2)) delete arg2;
return resultobj;
fail:
+ if (SWIG_IsNewObj(res2)) delete arg2;
return NULL;
}
@@ -31427,11 +31434,12 @@ SWIGINTERN PyObject *_wrap_OBBase_GetData(PyObject *self, PyObject *args) {
int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_OpenBabel__OBBase, 0);
_v = SWIG_CheckState(res);
if (_v) {
- void *vptr = 0;
- int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_std__string, 0);
- _v = SWIG_CheckState(res);
+ {
+ int res = SWIG_AsVal_unsigned_SS_int(argv[1], NULL);
+ _v = SWIG_CheckState(res);
+ }
if (_v) {
- return _wrap_OBBase_GetData__SWIG_1(self, args);
+ return _wrap_OBBase_GetData__SWIG_0(self, args);
}
}
}
@@ -31441,12 +31449,10 @@ SWIGINTERN PyObject *_wrap_OBBase_GetData(PyObject *self, PyObject *args) {
int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_OpenBabel__OBBase, 0);
_v = SWIG_CheckState(res);
if (_v) {
- {
- int res = SWIG_AsVal_unsigned_SS_int(argv[1], NULL);
- _v = SWIG_CheckState(res);
- }
+ int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
+ _v = SWIG_CheckState(res);
if (_v) {
- return _wrap_OBBase_GetData__SWIG_0(self, args);
+ return _wrap_OBBase_GetData__SWIG_1(self, args);
}
}
}
diff --git a/src/base.cpp b/src/base.cpp
index d4b34e9b9..8de68f56c 100644
--- a/src/base.cpp
+++ b/src/base.cpp
@@ -2,7 +2,7 @@
base.cpp - Base classes to build a graph
Copyright (C) 1998-2001 by OpenEye Scientific Software, Inc.
-Some portions Copyright (C) 2001-2005 by Geoffrey R. Hutchison
+Some portions Copyright (C) 2001-2006 by Geoffrey R. Hutchison
This file is part of the Open Babel project.
For more information, see
@@ -20,151 +20,142 @@ GNU General Public License for more details.
#include "babelconfig.h"
#include "base.h"
-#if HAVE_IOSTREAM
#include
-#elif HAVE_IOSTREAM_H
-#include
-#endif
-
-#if HAVE_FSTREAM
#include
-#elif HAVE_FSTREAM_H
-#include
-#endif
using namespace std;
//! Global namespace for all Open Babel code
namespace OpenBabel
{
-bool OBBase::HasData(string &s)
-{
+ bool OBBase::HasData(const string &s)
+ {
if (_vdata.empty())
- return(false);
+ return(false);
vector::iterator i;
for (i = _vdata.begin();i != _vdata.end();i++)
- if ((*i)->GetAttribute() == s)
- return(true);
+ if ((*i)->GetAttribute() == s)
+ return(true);
return(false);
-}
+ }
-bool OBBase::HasData(const char *s)
-//returns true if the generic attribute/value pair exists
-{
+ bool OBBase::HasData(const char *s)
+ //returns true if the generic attribute/value pair exists
+ {
if (_vdata.empty())
- return(false);
+ return(false);
vector::iterator i;
for (i = _vdata.begin();i != _vdata.end();i++)
- if ((*i)->GetAttribute() == s)
- return(true);
+ if ((*i)->GetAttribute() == s)
+ return(true);
return(false);
-}
+ }
-bool OBBase::HasData(unsigned int dt)
-//returns true if the generic attribute/value pair exists
-{
+ bool OBBase::HasData(const unsigned int dt)
+ //returns true if the generic attribute/value pair exists
+ {
if (_vdata.empty())
- return(false);
+ return(false);
vector::iterator i;
for (i = _vdata.begin();i != _vdata.end();i++)
- if ((*i)->GetDataType() == dt)
- return(true);
+ if ((*i)->GetDataType() == dt)
+ return(true);
return(false);
-}
+ }
-//! Returns the value given an attribute name
-OBGenericData *OBBase::GetData(string &s)
-{
+ //! Returns the value given an attribute name
+ OBGenericData *OBBase::GetData(const string &s)
+ {
vector::iterator i;
for (i = _vdata.begin();i != _vdata.end();i++)
- if ((*i)->GetAttribute() == s)
- return(*i);
+ if ((*i)->GetAttribute() == s)
+ return(*i);
return(NULL);
-}
+ }
-//! Returns the value given an attribute name
-OBGenericData *OBBase::GetData(const char *s)
-{
+ //! Returns the value given an attribute name
+ OBGenericData *OBBase::GetData(const char *s)
+ {
vector::iterator i;
for (i = _vdata.begin();i != _vdata.end();i++)
- if ((*i)->GetAttribute() == s)
- return(*i);
+ if ((*i)->GetAttribute() == s)
+ return(*i);
return(NULL);
-}
+ }
-OBGenericData *OBBase::GetData(unsigned int dt)
-{
+ OBGenericData *OBBase::GetData(const unsigned int dt)
+ {
vector::iterator i;
for (i = _vdata.begin();i != _vdata.end();i++)
- if ((*i)->GetDataType() == dt)
- return(*i);
+ if ((*i)->GetDataType() == dt)
+ return(*i);
return(NULL);
-}
+ }
-void OBBase::DeleteData(unsigned int dt)
-{
+ void OBBase::DeleteData(unsigned int dt)
+ {
vector vdata;
vector::iterator i;
for (i = _vdata.begin();i != _vdata.end();i++)
- if ((*i)->GetDataType() == dt)
- delete *i;
- else
- vdata.push_back(*i);
+ if ((*i)->GetDataType() == dt)
+ delete *i;
+ else
+ vdata.push_back(*i);
_vdata = vdata;
-}
+ }
-void OBBase::DeleteData(vector &vg)
-{
+ void OBBase::DeleteData(vector &vg)
+ {
vector vdata;
vector::iterator i,j;
bool del;
for (i = _vdata.begin();i != _vdata.end();i++)
- {
+ {
del = false;
for (j = vg.begin();j != vg.end();j++)
- if (*i == *j)
+ if (*i == *j)
{
- del = true;
- break;
+ del = true;
+ break;
}
if (del)
- delete *i;
+ delete *i;
else
- vdata.push_back(*i);
- }
+ vdata.push_back(*i);
+ }
_vdata = vdata;
-}
+ }
-void OBBase::DeleteData(OBGenericData *gd)
-{
+ void OBBase::DeleteData(OBGenericData *gd)
+ {
vector::iterator i;
for (i = _vdata.begin();i != _vdata.end();i++)
- if (*i == gd)
+ if (*i == gd)
{
- delete *i;
- _vdata.erase(i);
+ delete *i;
+ _vdata.erase(i);
}
-}
+ }
-/*
-bool OBGraphBase::Match(OBGraphBase &g,bool singleMatch)
-{
+ /*
+ bool OBGraphBase::Match(OBGraphBase &g,bool singleMatch)
+ {
SetFinishedMatch(false);
SetSingleMatch(singleMatch);
ClearMatches();
@@ -176,235 +167,235 @@ bool OBGraphBase::Match(OBGraphBase &g,bool singleMatch)
vector::iterator i;
for (node = g.Begin(i);node;node = g.Next(i))
- if (!node->Visit && seed->Eval(node))
- {
- node->Visit = true;
- seed->SetMatch(node);
- Match(g,BgnMatch(),BgnMatch()->second.begin());
- seed->SetMatch((OBNodeBase*)NULL);
- node->Visit = false;
- if (SingleMatch() && FinishedMatch())
- break;
- }
+ if (!node->Visit && seed->Eval(node))
+ {
+ node->Visit = true;
+ seed->SetMatch(node);
+ Match(g,BgnMatch(),BgnMatch()->second.begin());
+ seed->SetMatch((OBNodeBase*)NULL);
+ node->Visit = false;
+ if (SingleMatch() && FinishedMatch())
+ break;
+ }
g.SetVisitLock(false);
return(FinishedMatch());
-}
+ }
-bool OBGraphBase::Match(OBGraphBase &g,
- vector > >::iterator i,
- vector::iterator j)
-{
+ bool OBGraphBase::Match(OBGraphBase &g,
+ vector > >::iterator i,
+ vector::iterator j)
+ {
//bail if only one match has been requested
if (SingleMatch() && FinishedMatch())
- return(true);
+ return(true);
//full match completed
if (i == EndMatch() || (j == i->second.end() && (i+1) == EndMatch()))
{
- SetFinishedMatch(true);
- OBNodeBase *node;
- vector vn;
- vector::iterator i;
- for (node = Begin(i);node;node = Next(i))
- vn.push_back(node->GetMatch());
- PushBack(vn);
+ SetFinishedMatch(true);
+ OBNodeBase *node;
+ vector vn;
+ vector::iterator i;
+ for (node = Begin(i);node;node = Next(i))
+ vn.push_back(node->GetMatch());
+ PushBack(vn);
- return(true);
+ return(true);
}
//handle next seed of disconnected pattern
if (j == i->second.end())
{
- i++;
- OBNodeBase *node;
- OBNodeBase *seed = i->first;
- vector::iterator k;
- for (node = g.Begin(k);node;node = g.Next(k))
- if (!node->Visit && seed->Eval(node))
- {
- node->Visit = true;
- seed->SetMatch(node);
- Match(g,i,i->second.begin());
- seed->SetMatch((OBNodeBase*)NULL);
- node->Visit = false;
- if (SingleMatch() && FinishedMatch())
- break;
- }
- return(true);
+ i++;
+ OBNodeBase *node;
+ OBNodeBase *seed = i->first;
+ vector::iterator k;
+ for (node = g.Begin(k);node;node = g.Next(k))
+ if (!node->Visit && seed->Eval(node))
+ {
+ node->Visit = true;
+ seed->SetMatch(node);
+ Match(g,i,i->second.begin());
+ seed->SetMatch((OBNodeBase*)NULL);
+ node->Visit = false;
+ if (SingleMatch() && FinishedMatch())
+ break;
+ }
+ return(true);
}
OBEdgeBase *edge = *j++;
if (edge->IsClosure()) //check to see if matched atoms are bonded
{
- if (edge->GetBgn()->GetMatch()->IsConnected(edge->GetEnd()->GetMatch()))
- Match(g,i,j);
+ if (edge->GetBgn()->GetMatch()->IsConnected(edge->GetEnd()->GetMatch()))
+ Match(g,i,j);
}
else //bond hasn't been covered yet
{
- OBNodeBase *nbr;
- OBNodeBase *curr = edge->GetBgn();
- OBNodeBase *next = edge->GetEnd();
- OBNodeBase *match = curr->GetMatch();
- vector::iterator k;
+ OBNodeBase *nbr;
+ OBNodeBase *curr = edge->GetBgn();
+ OBNodeBase *next = edge->GetEnd();
+ OBNodeBase *match = curr->GetMatch();
+ vector::iterator k;
- for (nbr = match->BeginNbr(k);nbr;nbr = match->NextNbr(k))
- if (!nbr->Visit && next->Eval(nbr) && edge->Eval(*k))
- {
- nbr->Visit = true;
- next->SetMatch(nbr);
- Match(g,i,j);
- next->SetMatch(NULL);
- nbr->Visit = false;
- }
+ for (nbr = match->BeginNbr(k);nbr;nbr = match->NextNbr(k))
+ if (!nbr->Visit && next->Eval(nbr) && edge->Eval(*k))
+ {
+ nbr->Visit = true;
+ next->SetMatch(nbr);
+ Match(g,i,j);
+ next->SetMatch(NULL);
+ nbr->Visit = false;
+ }
}
return(false);
-}
-*/
-OBNodeBase *OBGraphBase::Begin(vector::iterator &i)
-{
+ }
+ */
+ OBNodeBase *OBGraphBase::Begin(vector::iterator &i)
+ {
i = _vatom.begin();
return((i != _vatom.end()) ? *i : NULL);
-}
+ }
-OBNodeBase *OBGraphBase::Next(vector::iterator &i)
-{
+ OBNodeBase *OBGraphBase::Next(vector::iterator &i)
+ {
i++;
return((i != _vatom.end()) ? *i : NULL);
-}
+ }
-OBEdgeBase *OBGraphBase::Begin(vector::iterator &i)
-{
+ OBEdgeBase *OBGraphBase::Begin(vector::iterator &i)
+ {
i = _vbond.begin();
return((i != _vbond.end()) ? *i : NULL);
-}
+ }
-OBEdgeBase *OBGraphBase::Next(vector::iterator &i)
-{
+ OBEdgeBase *OBGraphBase::Next(vector::iterator &i)
+ {
i++;
return((i != _vbond.end()) ? *i : NULL);
-}
+ }
-OBNodeBase *OBNodeBase::BeginNbr(vector::iterator &i)
-{
+ OBNodeBase *OBNodeBase::BeginNbr(vector::iterator &i)
+ {
i = _vbond.begin();
if (i == _vbond.end())
- return(NULL);
+ return(NULL);
return((this == (*i)->GetBgn()) ? (*i)->GetEnd() : (*i)->GetBgn());
-}
+ }
-OBNodeBase *OBNodeBase::NextNbr(vector::iterator &i)
-{
+ OBNodeBase *OBNodeBase::NextNbr(vector::iterator &i)
+ {
i++;
if (i == _vbond.end())
- return(NULL);
+ return(NULL);
return((this == (*i)->GetBgn()) ? (*i)->GetEnd() : (*i)->GetBgn());
-}
+ }
-void OBNodeBase::SetParent(OBGraphBase *p)
-{
+ void OBNodeBase::SetParent(OBGraphBase *p)
+ {
_parent = p;
-}
+ }
-void OBEdgeBase::SetParent(OBGraphBase *p)
-{
+ void OBEdgeBase::SetParent(OBGraphBase *p)
+ {
_parent = p;
-}
+ }
-bool OBNodeBase::IsConnected(OBNodeBase *nb)
-{
+ bool OBNodeBase::IsConnected(OBNodeBase *nb)
+ {
vector::iterator i;
for (i = _vbond.begin();i != _vbond.end();i++)
- if (nb == (*i)->GetBgn() || nb == (*i)->GetEnd())
- return(true);
+ if (nb == (*i)->GetBgn() || nb == (*i)->GetEnd())
+ return(true);
return(false);
-}
+ }
-void OBGraphBase::ResetVisitFlags()
-{
+ void OBGraphBase::ResetVisitFlags()
+ {
OBNodeBase *nb;
vector::iterator i;
for (nb = Begin(i);nb;nb = Next(i))
- nb->Visit = false;
+ nb->Visit = false;
OBEdgeBase *eb;
vector::iterator j;
for (eb = Begin(j);eb;eb = Next(j))
- eb->Visit = false;
-}
+ eb->Visit = false;
+ }
-bool OBGraphBase::SetVisitLock(bool v)
-{
+ bool OBGraphBase::SetVisitLock(bool v)
+ {
if (v && _vlock)
- return(false);
+ return(false);
_vlock = v;
return(true);
-}
+ }
-/*! \mainpage
+ /*! \mainpage
\section intro Introduction and History
-It is fair to say that Open Babel is a direct result of the original Babel.
-Application development is facilitated
-by building software on top of libraries rich in functionality. Babel
-was the first experience for Matt Stahl in designing a molecule
-library. In addition to developing Babel, Pat Walters and Matt
-developed `OBabel' at Vertex Pharmaceuticals, a first
-attempt at developing an object oriented molecule library.
-Matt later designed a new molecule class library, OELib -- designed
-to be flexible, extensible, portable, and efficient.
+ It is fair to say that Open Babel is a direct result of the original Babel.
+ Application development is facilitated
+ by building software on top of libraries rich in functionality. Babel
+ was the first experience for Matt Stahl in designing a molecule
+ library. In addition to developing Babel, Pat Walters and Matt
+ developed `OBabel' at Vertex Pharmaceuticals, a first
+ attempt at developing an object oriented molecule library.
+ Matt later designed a new molecule class library, OELib -- designed
+ to be flexible, extensible, portable, and efficient.
-OELib was released under the GNU General Public License (GPL) by Matt Stahl
-and Open Eye Scientific Software, Inc. to take advantage of many of
-the "great minds writing chemical software." Open Babel took up where
-OELib and Babel left off, starting from the existing GPL version of
-OELib, and has continued to evolve and improve into a separate
-high-quality chemistry class library and tool. Open Babel is now a
-separate project and library and has changed considerably from the OELib days.
+ OELib was released under the GNU General Public License (GPL) by Matt Stahl
+ and Open Eye Scientific Software, Inc. to take advantage of many of
+ the "great minds writing chemical software." Open Babel took up where
+ OELib and Babel left off, starting from the existing GPL version of
+ OELib, and has continued to evolve and improve into a separate
+ high-quality chemistry class library and tool. Open Babel is now a
+ separate project and library and has changed considerably from the OELib days.
-Thanks to all who have helped with Babel, OBabel, OELib and Open Babel.
-The list is long and growing.
+ Thanks to all who have helped with Babel, OBabel, OELib and Open Babel.
+ The list is long and growing.
\section pointers Key Modules
-The heart of Open Babel lies in the \link OpenBabel::OBMol OBMol\endlink,
-\link OpenBabel::OBAtom OBAtom\endlink, and
-\link OpenBabel::OBBond OBBond\endlink classes,
-which handle operations on atoms, bonds and molecules. Newcomers should
-start with looking at the \link OpenBabel::OBMol OBMol\endlink class,
-designed to store the basic information
-in a molecule and to perceive information about a molecule.
+ The heart of Open Babel lies in the \link OpenBabel::OBMol OBMol\endlink,
+ \link OpenBabel::OBAtom OBAtom\endlink, and
+ \link OpenBabel::OBBond OBBond\endlink classes,
+ which handle operations on atoms, bonds and molecules. Newcomers should
+ start with looking at the \link OpenBabel::OBMol OBMol\endlink class,
+ designed to store the basic information
+ in a molecule and to perceive information about a molecule.
-One of the key philosophies in the code is that transformations and
-automatic perception of properties are performed in a "lazy"
-manner. That is, until you call for partial atomic charges, no
-charges are calculated. This ensures faster transformations of
-chemical data -- properties that are not needed for your code will
-typically not be calculated. When such data is needed, appropriate
-routines are called, and a "flag" is set (e.g., via OBMol::SetFlag
-or OBAtom::SetFlag etc.) so that the code is only run once.
+ One of the key philosophies in the code is that transformations and
+ automatic perception of properties are performed in a "lazy"
+ manner. That is, until you call for partial atomic charges, no
+ charges are calculated. This ensures faster transformations of
+ chemical data -- properties that are not needed for your code will
+ typically not be calculated. When such data is needed, appropriate
+ routines are called, and a "flag" is set (e.g., via OBMol::SetFlag
+ or OBAtom::SetFlag etc.) so that the code is only run once.
-Arbitrary custom data and text descriptors can be stored in any atom,
-bond, molecule, or residue using the \link OpenBabel::OBGenericData
-OBGenericData\endlink or \link OpenBabel::OBPairData
-OBPairData\endlink classes.
+ Arbitrary custom data and text descriptors can be stored in any atom,
+ bond, molecule, or residue using the \link OpenBabel::OBGenericData
+ OBGenericData\endlink or \link OpenBabel::OBPairData
+ OBPairData\endlink classes.
-Conversion between various chemical file formats is accomplished through
-the \link OpenBabel::OBConversion OBConversion\endlink and \link
-OpenBabel::OBFormat OBFormat\endlink classes, often through use of the \link
-OpenBabel::OBMoleculeFormat OBMoleculeFormat\endlink subclass which is designed
-for easy read/write access to one or more \link OpenBabel::OBMol OBMol\endlink
-objects. The philosophy of the file format codes is to parse as much
-chemical information from a given file as possible (no data left
-behind) and ideally any perception or transformations will occur when
-writing to some other format later.
+ Conversion between various chemical file formats is accomplished through
+ the \link OpenBabel::OBConversion OBConversion\endlink and \link
+ OpenBabel::OBFormat OBFormat\endlink classes, often through use of the \link
+ OpenBabel::OBMoleculeFormat OBMoleculeFormat\endlink subclass which is designed
+ for easy read/write access to one or more \link OpenBabel::OBMol OBMol\endlink
+ objects. The philosophy of the file format codes is to parse as much
+ chemical information from a given file as possible (no data left
+ behind) and ideally any perception or transformations will occur when
+ writing to some other format later.
-*/
+ */
} // namespace OpenBabel
diff --git a/src/base.h b/src/base.h
index 3428290f6..82c88bfac 100644
--- a/src/base.h
+++ b/src/base.h
@@ -25,110 +25,108 @@ GNU General Public License for more details.
#include
#include