* Interface to GiNaC's light-weight expression handles. */
/*
- * GiNaC Copyright (C) 1999-2015 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
const_postorder_iterator postorder_end() const noexcept;
// evaluation
- ex eval(int level = 0) const { return bp->eval(level); }
- ex evalf(int level = 0) const { return bp->evalf(level); }
+ ex eval() const { return bp->eval(); }
+ ex evalf() const { return bp->evalf(); }
ex evalm() const { return bp->evalm(); }
ex eval_ncmul(const exvector & v) const { return bp->eval_ncmul(v); }
ex eval_integ() const { return bp->eval_integ(); }
ex series(const ex & r, int order, unsigned options = 0) const;
// rational functions
- ex normal(int level = 0) const;
+ ex normal() const;
ex to_rational(exmap & repl) const;
- ex to_rational(lst & repl_lst) const;
ex to_polynomial(exmap & repl) const;
- ex to_polynomial(lst & repl_lst) const;
ex numer() const;
ex denom() const;
ex numer_denom() const;
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))
{
}
/* Function objects for STL sort() etc. */
-struct ex_is_less : public std::binary_function<ex, ex, bool> {
+struct ex_is_less {
bool operator() (const ex &lh, const ex &rh) const { return lh.compare(rh) < 0; }
};
-struct ex_is_equal : public std::binary_function<ex, ex, bool> {
+struct ex_is_equal {
bool operator() (const ex &lh, const ex &rh) const { return lh.is_equal(rh); }
};
-struct op0_is_equal : public std::binary_function<ex, ex, bool> {
+struct op0_is_equal {
bool operator() (const ex &lh, const ex &rh) const { return lh.op(0).is_equal(rh.op(0)); }
};
-struct ex_swap : public std::binary_function<ex, ex, void> {
+struct ex_swap {
void operator() (ex &lh, ex &rh) const { lh.swap(rh); }
};
inline ex numer_denom(const ex & thisex)
{ return thisex.numer_denom(); }
-inline ex normal(const ex & thisex, int level=0)
-{ return thisex.normal(level); }
-
-inline ex to_rational(const ex & thisex, lst & repl_lst)
-{ return thisex.to_rational(repl_lst); }
+inline ex normal(const ex & thisex)
+{ return thisex.normal(); }
inline ex to_rational(const ex & thisex, exmap & repl)
{ return thisex.to_rational(repl); }
inline ex to_polynomial(const ex & thisex, exmap & repl)
{ return thisex.to_polynomial(repl); }
-inline ex to_polynomial(const ex & thisex, lst & repl_lst)
-{ return thisex.to_polynomial(repl_lst); }
-
inline ex collect(const ex & thisex, const ex & s, bool distributed = false)
{ return thisex.collect(s, distributed); }
-inline ex eval(const ex & thisex, int level = 0)
-{ return thisex.eval(level); }
+inline ex eval(const ex & thisex)
+{ return thisex.eval(); }
-inline ex evalf(const ex & thisex, int level = 0)
-{ return thisex.evalf(level); }
+inline ex evalf(const ex & thisex)
+{ return thisex.evalf(); }
inline ex evalm(const ex & thisex)
{ return thisex.evalm(); }
a.swap(b);
}
-/** Specialization of std::iter_swap() for vector<ex> iterators. */
-template <>
-inline void iter_swap(vector<GiNaC::ex>::iterator i1, vector<GiNaC::ex>::iterator i2)
+/** Specialization of std::hash() for ex objects. */
+template<>
+struct hash<GiNaC::ex>
{
- i1->swap(*i2);
-}
+ std::size_t operator()(const GiNaC::ex & e) const noexcept
+ {
+ return e.gethash();
+ }
+};
-/** Specialization of std::iter_swap() for list<ex> iterators. */
-template <>
-inline void iter_swap(list<GiNaC::ex>::iterator i1, list<GiNaC::ex>::iterator i2)
+/** Specialization of std::equal_to() for ex objects. */
+template<>
+struct equal_to<GiNaC::ex>
{
- i1->swap(*i2);
-}
+ bool operator()(const GiNaC::ex &e1, const GiNaC::ex &e2) const noexcept
+ {
+ return e1.is_equal(e2);
+ }
+};
} // namespace std