|
|
b852397 |
--- src/integer.c.orig 2019-02-23 15:43:33.000000000 -0700
|
|
|
b852397 |
+++ src/integer.c 2019-03-12 13:39:47.357775303 -0600
|
|
|
b852397 |
@@ -567,6 +567,41 @@ Obj ObjInt_UInt8( UInt8 i )
|
|
|
3ed98e8 |
#endif
|
|
|
e0c8972 |
}
|
|
|
e0c8972 |
|
|
|
e0c8972 |
+Obj ObjInt_LongLong( long long i )
|
|
|
e0c8972 |
+{
|
|
|
e0c8972 |
+ Obj gmp;
|
|
|
e0c8972 |
+ unsigned long long ull;
|
|
|
e0c8972 |
+ size_t j;
|
|
|
e0c8972 |
+
|
|
|
e0c8972 |
+ if ( (-(1LL<
|
|
|
e0c8972 |
+ return INTOBJ_INT((Int) i);
|
|
|
e0c8972 |
+
|
|
|
e0c8972 |
+ if ( i >= 0LL ) {
|
|
|
e0c8972 |
+ gmp = NewBag( T_INTPOS, sizeof(i) );
|
|
|
e0c8972 |
+ ull = (unsigned long long) i;
|
|
|
e0c8972 |
+ }
|
|
|
e0c8972 |
+ else {
|
|
|
e0c8972 |
+ gmp = NewBag( T_INTNEG, sizeof(i) );
|
|
|
e0c8972 |
+ ull = (unsigned long long) -i;
|
|
|
e0c8972 |
+ }
|
|
|
3ed98e8 |
+ for ( j = 0U; j < sizeof(i) / sizeof(mp_limb_t); j++ )
|
|
|
3ed98e8 |
+ ((mp_limb_t *)ADDR_OBJ( gmp ))[j] = ull >> (j * sizeof(mp_limb_t));
|
|
|
e0c8972 |
+ return GMP_NORMALIZE( gmp );
|
|
|
e0c8972 |
+}
|
|
|
e0c8972 |
+
|
|
|
e0c8972 |
+Obj ObjInt_ULongLong( unsigned long long i )
|
|
|
e0c8972 |
+{
|
|
|
e0c8972 |
+ Obj gmp;
|
|
|
e0c8972 |
+ size_t j;
|
|
|
e0c8972 |
+
|
|
|
e0c8972 |
+ if ( i < 1ULL<
|
|
|
e0c8972 |
+ return INTOBJ_INT((Int) i);
|
|
|
e0c8972 |
+ gmp = NewBag( T_INTPOS, sizeof(i) );
|
|
|
3ed98e8 |
+ for ( j = 0U; j < sizeof(i) / sizeof(mp_limb_t); j++ )
|
|
|
3ed98e8 |
+ ((mp_limb_t *)ADDR_OBJ( gmp ))[j] = i >> (j * sizeof(mp_limb_t));
|
|
|
e0c8972 |
+ return GMP_NORMALIZE( gmp );
|
|
|
e0c8972 |
+}
|
|
|
e0c8972 |
+
|
|
|
3ed98e8 |
/**************************************************************************
|
|
|
e0c8972 |
**
|
|
|
3ed98e8 |
** Convert GAP Integers to various C types -- see header file
|
|
|
b852397 |
--- src/integer.h.orig 2019-02-23 15:43:33.000000000 -0700
|
|
|
b852397 |
+++ src/integer.h 2019-03-12 13:39:47.358775285 -0600
|
|
|
3ed98e8 |
@@ -135,6 +135,8 @@ extern Obj ObjInt_Int(Int i);
|
|
|
3ed98e8 |
extern Obj ObjInt_UInt(UInt i);
|
|
|
3ed98e8 |
extern Obj ObjInt_Int8(Int8 i);
|
|
|
3ed98e8 |
extern Obj ObjInt_UInt8(UInt8 i);
|
|
|
3ed98e8 |
+extern Obj ObjInt_LongLong(long long i);
|
|
|
3ed98e8 |
+extern Obj ObjInt_ULongLong(unsigned long long i);
|
|
|
3ed98e8 |
|
|
|
3ed98e8 |
/**************************************************************************
|
|
|
e0c8972 |
**
|