]> www.ginac.de Git - ginac.git/blobdiff - ginac/idx.cpp
Synced to HEAD
[ginac.git] / ginac / idx.cpp
index 9962c8eb6b97739fa4db3b5985635c44d79fada1..c95c07c72fc87ef01655d157ef256e21a587bf78 100644 (file)
@@ -41,7 +41,7 @@ GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(idx, basic,
 
 GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(varidx, idx,
   print_func<print_context>(&varidx::do_print).
-  // print_latex inherited from idx
+  print_func<print_latex>(&varidx::do_print_latex).
   print_func<print_tree>(&varidx::do_print_tree))
 
 GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(spinidx, varidx,
@@ -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