]> www.ginac.de Git - ginac.git/blobdiff - ginac/idx.cpp
* Forward declare simplify indexed for GCC 4.1 [Sheplyakov Alexei].
[ginac.git] / ginac / idx.cpp
index 9962c8eb6b97739fa4db3b5985635c44d79fada1..3beb3ac778a9f1108c37189189269ddc4267e8e4 100644 (file)
@@ -3,7 +3,7 @@
  *  Implementation of GiNaC's indices. */
 
 /*
- *  GiNaC Copyright (C) 1999-2004 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2005 Johannes Gutenberg University Mainz, Germany
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
 #include <iostream>
@@ -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