z := alloc(xl + 1); // add space for one extra digit
for i := 0; i < xl; i++ { z[i + H] = x[i + H]; }
- set_len(z, xl);
+ set_len(z, int(x[0])); // don't loose sign!
return z;
}
// Comparisons
func (x Integer) cmp (y Integer) int {
- return 0;
+ // do better then this
+ d := x.sub(y);
+ switch {
+ case sign(d.val): return -1;
+ case zero(d.val): return 0;
+ default : return +1;
+ }
+ CHECK(false); // unreachable
}
return tostring(x.val);
}
+
+func (x Integer) ToInt() int {
+ v := x.val;
+ if len_(v) <= 1 {
+ if zero(v) {
+ return 0;
+ }
+ i := int(v[0 + H]);
+ if sign(v) {
+ i = -i; // incorrect for smallest int
+ }
+ return i;
+ }
+ panic "integer too large";
+}