]> www.ginac.de Git - ginac.git/blobdiff - ginac/relational.cpp
calchash(): work around broken RTTI.
[ginac.git] / ginac / relational.cpp
index b59f7ab37981e662a33a0a18a27e512142268528..eff8e945d992d03225683f587f03e239f057803e 100644 (file)
@@ -3,7 +3,7 @@
  *  Implementation of relations between expressions */
 
 /*
- *  GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2009 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 {
 
@@ -55,8 +56,9 @@ relational::relational(const ex & lhs, const ex & rhs, operators 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"));
@@ -64,6 +66,7 @@ relational::relational(const archive_node &n, lst &sym_lst) : inherited(n, sym_l
        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
 {
@@ -73,8 +76,6 @@ void relational::archive(archive_node &n) const
        n.add_unsigned("op", o);
 }
 
-DEFAULT_UNARCHIVE(relational)
-
 //////////
 // functions overriding virtual functions from base classes
 //////////
@@ -259,8 +260,7 @@ return_type_t relational::return_type_tinfo() const
 
 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();