// Copyright 2021 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_BIGINT_DIV_HELPERS_H_ #define V8_BIGINT_DIV_HELPERS_H_ #include <memory> #include "src/bigint/bigint.h" #include "src/bigint/util.h" namespace v8 { namespace bigint { void LeftShift(RWDigits Z, Digits X, int shift); void RightShift(RWDigits Z, Digits X, int shift); inline void PutAt(RWDigits Z, Digits A, int count) { … } // Division algorithms typically need to left-shift their inputs into // "bit-normalized" form (i.e. top bit is set). The inputs are considered // read-only, and V8 relies on that by allowing concurrent reads from them, // so by default, {ShiftedDigits} allocate temporary storage for their // contents. In-place modification is opt-in for cases where callers can // guarantee that it is safe. // When callers allow in-place shifting and wish to undo it, they have to do // so manually using {Reset()}. // If {shift} is not given, it is auto-detected from {original}'s // leading zeros. class ShiftedDigits : public Digits { … }; } // namespace bigint } // namespace v8 #endif // V8_BIGINT_DIV_HELPERS_H_