* Implementation of relations between expressions */
/*
- * 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 <stdexcept>
-
#include "relational.h"
#include "operators.h"
#include "numeric.h"
#include "archive.h"
#include "utils.h"
+#include "hash_seed.h"
+
+#include <iostream>
+#include <stdexcept>
namespace GiNaC {
// default constructor
//////////
-relational::relational() : basic(&relational::tinfo_static) {}
+relational::relational() { }
//////////
// other constructors
// public
-relational::relational(const ex & lhs, const ex & rhs, operators oper) : basic(&relational::tinfo_static), lh(lhs), rh(rhs), o(oper) {}
+relational::relational(const ex & lhs, const ex & rhs, operators oper) :
+ lh(lhs), rh(rhs), o(oper) { }
//////////
// archiving
//////////
-relational::relational(const archive_node &n, lst &sym_lst) : inherited(n, sym_lst)
+void relational::read_archive(const archive_node& n, lst& sym_lst)
{
+ inherited::read_archive(n, sym_lst);
unsigned int opi;
if (!(n.find_unsigned("op", opi)))
throw (std::runtime_error("unknown relational operator in archive"));
n.find_ex("lh", lh, sym_lst);
n.find_ex("rh", rh, sym_lst);
}
+GINAC_BIND_UNARCHIVER(relational);
void relational::archive(archive_node &n) const
{
n.add_unsigned("op", o);
}
-DEFAULT_UNARCHIVE(relational)
-
//////////
// functions overriding virtual functions from base classes
//////////
unsigned relational::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));
unsigned lhash = lh.gethash();
unsigned rhash = rh.gethash();