X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fidx.cpp;h=80e66bce5092c8939313704e5cc6e5a362070ef1;hp=9550b22a5098d1a5a689c2b187003d9481f20a12;hb=38e6775ed4f33912f3d23ebd0291373a275be86e;hpb=a1eaf43324b5a13f7fd133f41366553081f0a3a8 diff --git a/ginac/idx.cpp b/ginac/idx.cpp index 9550b22a..80e66bce 100644 --- a/ginac/idx.cpp +++ b/ginac/idx.cpp @@ -3,7 +3,7 @@ * Implementation of GiNaC's indices. */ /* - * GiNaC Copyright (C) 1999-2005 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2007 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 @@ -53,23 +53,23 @@ GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(spinidx, varidx, // default constructor ////////// -idx::idx() : inherited(TINFO_idx) {} +idx::idx() : inherited(&idx::tinfo_static) {} varidx::varidx() : covariant(false) { - tinfo_key = TINFO_varidx; + tinfo_key = &varidx::tinfo_static; } spinidx::spinidx() : dotted(false) { - tinfo_key = TINFO_spinidx; + tinfo_key = &spinidx::tinfo_static; } ////////// // other constructors ////////// -idx::idx(const ex & v, const ex & d) : inherited(TINFO_idx), value(v), dim(d) +idx::idx(const ex & v, const ex & d) : inherited(&idx::tinfo_static), value(v), dim(d) { if (is_dim_numeric()) if (!dim.info(info_flags::posint)) @@ -78,12 +78,12 @@ idx::idx(const ex & v, const ex & d) : inherited(TINFO_idx), value(v), dim(d) varidx::varidx(const ex & v, const ex & d, bool cov) : inherited(v, d), covariant(cov) { - tinfo_key = TINFO_varidx; + tinfo_key = &varidx::tinfo_static; } spinidx::spinidx(const ex & v, const ex & d, bool cov, bool dot) : inherited(v, d, cov), dotted(dot) { - tinfo_key = TINFO_spinidx; + tinfo_key = &spinidx::tinfo_static; } ////////// @@ -338,7 +338,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(tinfo()); + unsigned v = golden_ratio_hash((p_int)tinfo()); v = rotate_left(v); v ^= value.gethash(); @@ -365,7 +365,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