* Interface to GiNaC's light-weight expression handles. */
/*
- * GiNaC Copyright (C) 1999-2019 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2020 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
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
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();
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))
{
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