On 64-bit windows std::size_t is `unsigned long long` (64 bit).
However there is no ex constructor taking (unsigned) long long.
This patch adds ex and numeric constructors taking `long long`
and `unsigned long long`.
return dynallocate<numeric>(i);
}
}
-
+
+basic & ex::construct_from_longlong(long long i)
+{
+ if (i >= -12 && i <= 12) {
+ return construct_from_int(static_cast<int>(i));
+ } else {
+ return dynallocate<numeric>(i);
+ }
+}
+
+basic & ex::construct_from_ulonglong(unsigned long long i)
+{
+ if (i <= 12) {
+ return construct_from_uint(static_cast<unsigned>(i));
+ } else {
+ return dynallocate<numeric>(i);
+ }
+}
+
basic & ex::construct_from_double(double d)
{
return dynallocate<numeric>(d);
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))
{
setflag(status_flags::evaluated | status_flags::expanded);
}
+numeric::numeric(long long i)
+{
+ value = cln::cl_I(i);
+ setflag(status_flags::evaluated | status_flags::expanded);
+}
+
+numeric::numeric(unsigned long long i)
+{
+ value = cln::cl_I(i);
+ setflag(status_flags::evaluated | status_flags::expanded);
+}
/** Constructor for rational numerics a/b.
*
numeric(unsigned int i);
numeric(long i);
numeric(unsigned long i);
+ numeric(long long i);
+ numeric(unsigned long long i);
numeric(long numer, long denom);
numeric(double d);
numeric(const char *);