in core/indigo-core/molecule/src/molecule_sgroups.cpp [470:657]
void MoleculeSGroups::findSGroups(int property, const char* str, Array<int>& sgs)
{
int i;
if (property == SGroup::SG_CLASS)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_SUP)
{
Superatom& sa = (Superatom&)sg;
BufferScanner sc(sa.sa_class);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_LABEL)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_SUP)
{
Superatom& sa = (Superatom&)sg;
BufferScanner sc(sa.subscript);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
else if (sg.sgroup_type == SGroup::SG_TYPE_SRU)
{
RepeatingUnit& ru = (RepeatingUnit&)sg;
BufferScanner sc(ru.subscript);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_DATA)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
BufferScanner sc(dg.data);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_DATA_NAME)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
BufferScanner sc(dg.name);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_DATA_TYPE)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
BufferScanner sc(dg.type);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_DATA_DESCRIPTION)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
BufferScanner sc(dg.description);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_DATA_DISPLAY)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
if (((strcasecmp(str, "detached") == 0) && dg.detached) || ((strcasecmp(str, "attached") == 0) && !dg.detached))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_DATA_LOCATION)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
if (((strcasecmp(str, "relative") == 0) && dg.relative) || ((strcasecmp(str, "absolute") == 0) && !dg.relative))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_DATA_TAG)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
if ((strlen(str) == 1) && str[0] == dg.tag)
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_QUERY_CODE)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
BufferScanner sc(dg.querycode);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
}
}
else if (property == SGroup::SG_QUERY_OPER)
{
for (i = _sgroups.begin(); i != _sgroups.end(); i = _sgroups.next(i))
{
SGroup& sg = *_sgroups.at(i);
if (sg.sgroup_type == SGroup::SG_TYPE_DAT)
{
DataSGroup& dg = (DataSGroup&)sg;
BufferScanner sc(dg.queryoper);
if (sc.findWordIgnoreCase(str))
{
sgs.push(i);
}
}
}
}
else
throw Error("Unknown or incomaptible value Sgroup property: %d", property);
}