* Implementation of sequences of expression pairs. */
/*
- * GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2010 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
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <iostream>
-#include <algorithm>
-#include <string>
-#include <stdexcept>
-#include <iterator>
-
#include "expairseq.h"
#include "lst.h"
#include "add.h"
#include "archive.h"
#include "operators.h"
#include "utils.h"
+#include "hash_seed.h"
#include "indexed.h"
+#include <algorithm>
#if EXPAIRSEQ_USE_HASHTAB
#include <cmath>
#endif // EXPAIRSEQ_USE_HASHTAB
+#include <iostream>
+#include <iterator>
+#include <stdexcept>
+#include <string>
namespace GiNaC {
// public
-expairseq::expairseq() : inherited(&expairseq::tinfo_static)
+expairseq::expairseq()
#if EXPAIRSEQ_USE_HASHTAB
- , hashtabsize(0)
+ : hashtabsize(0)
#endif // EXPAIRSEQ_USE_HASHTAB
{}
// other constructors
//////////
-expairseq::expairseq(const ex &lh, const ex &rh) : inherited(&expairseq::tinfo_static)
+expairseq::expairseq(const ex &lh, const ex &rh)
{
construct_from_2_ex(lh,rh);
GINAC_ASSERT(is_canonical());
}
-expairseq::expairseq(const exvector &v) : inherited(&expairseq::tinfo_static)
+expairseq::expairseq(const exvector &v)
{
construct_from_exvector(v);
GINAC_ASSERT(is_canonical());
}
expairseq::expairseq(const epvector &v, const ex &oc, bool do_index_renaming)
- : inherited(&expairseq::tinfo_static), overall_coeff(oc)
+ : overall_coeff(oc)
{
GINAC_ASSERT(is_a<numeric>(oc));
construct_from_epvector(v, do_index_renaming);
}
expairseq::expairseq(std::auto_ptr<epvector> vp, const ex &oc, bool do_index_renaming)
- : inherited(&expairseq::tinfo_static), overall_coeff(oc)
+ : overall_coeff(oc)
{
GINAC_ASSERT(vp.get()!=0);
GINAC_ASSERT(is_a<numeric>(oc));
// archiving
//////////
-expairseq::expairseq(const archive_node &n, lst &sym_lst) : inherited(n, sym_lst)
-#if EXPAIRSEQ_USE_HASHTAB
- , hashtabsize(0)
-#endif
+void expairseq::read_archive(const archive_node &n, lst &sym_lst)
{
+ inherited::read_archive(n, sym_lst);
archive_node::archive_node_cit first = n.find_first("rest");
archive_node::archive_node_cit last = n.find_last("coeff");
++last;
n.add_ex("overall_coeff", overall_coeff);
}
-DEFAULT_UNARCHIVE(expairseq)
//////////
// functions overriding virtual functions from base classes
unsigned expairseq::calchash() const
{
- const void* this_tinfo = (const void*)typeid(*this).name();
- unsigned v = golden_ratio_hash((p_int)this_tinfo);
+ unsigned v = make_hash_seed(typeid(*this));
epvector::const_iterator i = seq.begin();
const epvector::const_iterator end = seq.end();
while (i != end) {