Expr (a,b)+(c,d) is now equivalent to (a+c,b+d)
This commit is contained in:
parent
27fc3a3d43
commit
7b7814d466
1 changed files with 17 additions and 7 deletions
24
src/value.cc
24
src/value.cc
|
|
@ -270,9 +270,15 @@ value_t& value_t::operator+=(const value_t& val)
|
||||||
}
|
}
|
||||||
else if (is_sequence()) {
|
else if (is_sequence()) {
|
||||||
if (val.is_sequence()) {
|
if (val.is_sequence()) {
|
||||||
sequence_t& seq(as_sequence_lval());
|
if (size() == val.size()) {
|
||||||
seq.insert(seq.end(), val.as_sequence().begin(),
|
sequence_t::iterator i = begin();
|
||||||
val.as_sequence().end());
|
sequence_t::const_iterator j = val.begin();
|
||||||
|
|
||||||
|
for (; i != end(); i++, j++)
|
||||||
|
*i += *j;
|
||||||
|
} else {
|
||||||
|
throw_(value_error, "Cannot add sequences of different lengths");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
as_sequence_lval().push_back(val);
|
as_sequence_lval().push_back(val);
|
||||||
}
|
}
|
||||||
|
|
@ -390,10 +396,14 @@ value_t& value_t::operator-=(const value_t& val)
|
||||||
sequence_t& seq(as_sequence_lval());
|
sequence_t& seq(as_sequence_lval());
|
||||||
|
|
||||||
if (val.is_sequence()) {
|
if (val.is_sequence()) {
|
||||||
foreach (const value_t& v, val.as_sequence()) {
|
if (size() == val.size()) {
|
||||||
sequence_t::iterator j = std::find(seq.begin(), seq.end(), v);
|
sequence_t::iterator i = begin();
|
||||||
if (j != seq.end())
|
sequence_t::const_iterator j = val.begin();
|
||||||
seq.erase(j);
|
|
||||||
|
for (; i != end(); i++, j++)
|
||||||
|
*i -= *j;
|
||||||
|
} else {
|
||||||
|
throw_(value_error, "Cannot subtract sequences of different lengths");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sequence_t::iterator i = std::find(seq.begin(), seq.end(), val);
|
sequence_t::iterator i = std::find(seq.begin(), seq.end(), val);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue