mirror of
https://github.com/dlang/phobos.git
synced 2025-05-06 11:07:39 +03:00
Added function balancedParens
This commit is contained in:
parent
98a9719f42
commit
f0b2af7f07
1 changed files with 54 additions and 0 deletions
|
@ -3450,6 +3450,60 @@ unittest
|
|||
assert(count!("a == 3")(a) == 2);
|
||||
}
|
||||
|
||||
// balancedParens
|
||||
/**
|
||||
Checks whether $(D r) has "balanced parentheses", i.e. all instances
|
||||
of $(D lPar) are closed by corresponding instances of $(D rPar). The
|
||||
parameter $(D maxNestingLevel) controls the nesting level allowed. The
|
||||
most common uses are the default or $(D 0). In the latter case, no
|
||||
nesting is allowed.
|
||||
|
||||
Example:
|
||||
----
|
||||
auto s = "1 + (2 * (3 + 1 / 2)";
|
||||
assert(!balancedParens(s, '(', ')'));
|
||||
s = "1 + (2 * (3 + 1) / 2)";
|
||||
assert(balancedParens(s, '(', ')'));
|
||||
s = "1 + (2 * (3 + 1) / 2)";
|
||||
assert(!balancedParens(s, '(', ')', 1));
|
||||
s = "1 + (2 * 3 + 1) / (2 - 5)";
|
||||
assert(balancedParens(s, '(', ')', 1));
|
||||
----
|
||||
*/
|
||||
|
||||
bool balancedParens(Range, E)(Range r, E lPar, E rPar,
|
||||
size_t maxNestingLevel = size_t.max)
|
||||
if (isInputRange!(Range) && is(typeof(r.front == lPar)))
|
||||
{
|
||||
size_t count;
|
||||
for (; !r.empty; r.popFront())
|
||||
{
|
||||
if (r.front == lPar)
|
||||
{
|
||||
if (count == maxNestingLevel) return false;
|
||||
++count;
|
||||
}
|
||||
else if (r.front == rPar)
|
||||
{
|
||||
if (!count) return false;
|
||||
--count;
|
||||
}
|
||||
}
|
||||
return count == 0;
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
auto s = "1 + (2 * (3 + 1 / 2)";
|
||||
assert(!balancedParens(s, '(', ')'));
|
||||
s = "1 + (2 * (3 + 1) / 2)";
|
||||
assert(balancedParens(s, '(', ')'));
|
||||
s = "1 + (2 * (3 + 1) / 2)";
|
||||
assert(!balancedParens(s, '(', ')', 1));
|
||||
s = "1 + (2 * 3 + 1) / (2 - 5)";
|
||||
assert(balancedParens(s, '(', ')', 1));
|
||||
}
|
||||
|
||||
// equal
|
||||
/**
|
||||
Returns $(D true) if and only if the two ranges compare equal element
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue