]> www.ginac.de Git - ginac.git/blobdiff - ginac/ex.h
[PATCH] numeric, ex: added constructors taking `long long`. Fixes MinGW64 build.
[ginac.git] / ginac / ex.h
index 507776321c76e8d4d60b9c45db1ca0c9e9e226f5..abef5ecfb32f3a3e052a9dc54c4af5790b835271 100644 (file)
@@ -3,7 +3,7 @@
  *  Interface to GiNaC's light-weight expression handles. */
 
 /*
- *  GiNaC Copyright (C) 1999-2016 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2019 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
@@ -87,6 +87,8 @@ public:
        ex(unsigned int i);
        ex(long i);
        ex(unsigned long i);
+       ex(long long i);
+       ex(unsigned long long i);
        ex(double const d);
 
        /** Construct ex from string and a list of symbols. The input grammar is
@@ -236,6 +238,8 @@ private:
        static basic & construct_from_uint(unsigned int i);
        static basic & construct_from_long(long i);
        static basic & construct_from_ulong(unsigned long i);
+       static basic & construct_from_longlong(long long i);
+       static basic & construct_from_ulonglong(unsigned long long i);
        static basic & construct_from_double(double d);
        static ptr<basic> construct_from_string_and_lst(const std::string &s, const ex &l);
        void makewriteable();
@@ -290,6 +294,18 @@ ex::ex(unsigned long i) : bp(construct_from_ulong(i))
        GINAC_ASSERT(bp->flags & status_flags::dynallocated);
 }
 
+inline
+ex::ex(long long i) : bp(construct_from_longlong(i))
+{
+       GINAC_ASSERT(bp->flags & status_flags::dynallocated);
+}
+
+inline
+ex::ex(unsigned long long i) : bp(construct_from_ulonglong(i))
+{
+       GINAC_ASSERT(bp->flags & status_flags::dynallocated);
+}
+
 inline
 ex::ex(double const d) : bp(construct_from_double(d))
 {
@@ -962,6 +978,26 @@ inline void swap(GiNaC::ex &a, GiNaC::ex &b)
        a.swap(b);
 }
 
+/** Specialization of std::hash() for ex objects. */
+template<>
+struct hash<GiNaC::ex>
+{
+       std::size_t operator()(const GiNaC::ex & e) const noexcept
+       {
+               return e.gethash();
+       }
+};
+
+/** Specialization of std::equal_to() for ex objects. */
+template<>
+struct equal_to<GiNaC::ex>
+{
+       bool operator()(const GiNaC::ex &e1, const GiNaC::ex &e2) const noexcept
+       {
+               return e1.is_equal(e2);
+       }
+};
+
 } // namespace std
 
 #endif // ndef GINAC_EX_H