big: Fast square method.

This commit is contained in:
Jeroen van Rijn
2021-08-11 20:59:51 +02:00
parent b4a29844e9
commit c3a4d7dda2
3 changed files with 92 additions and 19 deletions
+17 -3
View File
@@ -57,9 +57,7 @@ set :: proc { int_set_from_integer, int_copy };
Copy one `Int` to another.
*/
int_copy :: proc(dest, src: ^Int, allocator := context.allocator) -> (err: Error) {
if err = clear_if_uninitialized(src); err != .None {
return err;
}
if err = clear_if_uninitialized(src); err != .None { return err; }
/*
If dest == src, do nothing
*/
@@ -535,6 +533,22 @@ clear_if_uninitialized :: proc(dest: ^Int, minimize := false) -> (err: Error) {
return .None;
}
_copy_digits :: proc(dest, src: ^Int, digits: int) -> (err: Error) {
digits := digits;
if err = clear_if_uninitialized(src); err != .None { return err; }
if err = clear_if_uninitialized(dest); err != .None { return err; }
/*
If dest == src, do nothing
*/
if (dest == src) {
return .None;
}
digits = min(digits, len(src.digit), len(dest.digit));
mem.copy_non_overlapping(&dest.digit[0], &src.digit[0], size_of(DIGIT) * digits);
return .None;
}
/*
Trim unused digits.