Chemistry-MolecularMass
view release on metacpan or search on metacpan
MolecularMass/MolecularMass.xs view on Meta::CPAN
/***********************************************************/
char *matching_bracket(char *s, char *t)
{
char left;
char right;
int i = 1;
left = *s;
right = other_bracket(*s);
++s;
while (s < t)
{
if (*s == right) --i;
if (*s == left) ++i;
if (i == 0) break;
++s;
}
if (i == 0) return (s);
return (NULL);
}
/***********************************************************/
char other_bracket(char b)
{
if (b == '[') return (']');
if (b == '{') return ('}');
if (b == '(') return (')');
if (b == '<') return ('>');
if (b == ']') return ('[');
if (b == '}') return ('{');
if (b == ')') return ('(');
if (b == '>') return ('<');
return ('\0');
}
/************************************************************/
/* */
/* XSUB stuff */
/* */
/************************************************************/
MODULE = Chemistry::MolecularMass PACKAGE = Chemistry::MolecularMass
int
verify_parens(s)
char *s;
CODE:
RETVAL = verify_brackets(s);
OUTPUT:
RETVAL
void
parse_formula(s)
char *s;
PREINIT:
Atom_count *i;
PPCODE:
i = parse_formula_c(s);
if(i == NULL)
{
/* do push nothing on the stack --
an empty list is implicitly returned */
}
else
{
while(i != NULL)
{
EXTEND(SP, 2);
PUSHs(newSVpv(i->element_symbol, 0));
PUSHs(newSViv(i->count));
i = i->next;
}
}
( run in 0.508 second using v1.01-cache-2.11-cpan-ad19def0cd9 )