X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fidx.cpp;h=c1412b9de73ff8bcfe5c43e7d679e7c4d3757935;hp=9211294b5cefc124d0cffe59ccbf44422c30ac6b;hb=eaa0370ac188561e02195a377b252b4caf5ab57a;hpb=3ac17e18ada69428fe170c10abcc5f33a30f0676 diff --git a/ginac/idx.cpp b/ginac/idx.cpp index 9211294b..c1412b9d 100644 --- a/ginac/idx.cpp +++ b/ginac/idx.cpp @@ -3,7 +3,7 @@ * Implementation of GiNaC's indices. */ /* - * GiNaC Copyright (C) 1999-2006 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2008 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 @@ -37,6 +37,7 @@ namespace GiNaC { GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(idx, basic, print_func(&idx::do_print). print_func(&idx::do_print_latex). + print_func(&idx::do_print_csrc). print_func(&idx::do_print_tree)) GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(varidx, idx, @@ -161,6 +162,16 @@ void idx::do_print_latex(const print_latex & c, unsigned level) const c.s << "}"; } +void idx::do_print_csrc(const print_csrc & c, unsigned level) const +{ + c.s << "["; + if (value.info(info_flags::integer)) + c.s << ex_to(value).to_int(); + else + value.print(c); + c.s << "]"; +} + void idx::do_print_tree(const print_tree & c, unsigned level) const { c.s << std::string(level, ' ') << class_name() << " @" << this @@ -223,8 +234,11 @@ void spinidx::do_print_tree(const print_tree & c, unsigned level) const bool idx::info(unsigned inf) const { - if (inf == info_flags::idx) - return true; + switch(inf) { + case info_flags::idx: + case info_flags::has_indices: + return true; + } return inherited::info(inf); } @@ -338,7 +352,7 @@ unsigned idx::calchash() const // hash keys. That is, the hash values must not depend on the index // dimensions or other attributes (variance etc.). // The compare_same_type() methods will take care of the rest. - unsigned v = golden_ratio_hash((unsigned)tinfo()); + unsigned v = golden_ratio_hash((p_int)tinfo()); v = rotate_left(v); v ^= value.gethash(); @@ -365,7 +379,7 @@ ex idx::subs(const exmap & m, unsigned options) const if (it != m.end()) { // Substitution index->index - if (is_a(it->second)) + if (is_a(it->second) || (options & subs_options::really_subs_idx)) return it->second; // Otherwise substitute value