]> www.ginac.de Git - ginac.git/blobdiff - ginac/idx.cpp
synced to 1.2 (typos, better ncmul::degree() and ::coeff())
[ginac.git] / ginac / idx.cpp
index 1aba28bf302c0c20abe672a718761bcc0c798fd5..c95c07c72fc87ef01655d157ef256e21a587bf78 100644 (file)
@@ -242,11 +242,16 @@ ex idx::op(size_t i) const
 
 ex idx::map(map_function & f) const
 {
-       idx *copy = duplicate();
-       copy->setflag(status_flags::dynallocated);
-       copy->clearflag(status_flags::hash_calculated);
-       copy->value = f(value);
-       return *copy;
+       const ex &mapped_value = f(value);
+       if (are_ex_trivially_equal(value, mapped_value))
+               return *this;
+       else {
+               idx *copy = duplicate();
+               copy->setflag(status_flags::dynallocated);
+               copy->clearflag(status_flags::hash_calculated);
+               copy->value = mapped_value;
+               return *copy;
+       }
 }
 
 /** Returns order relation between two indices of the same type. The order