[poincare] Clean Rational and Decimal size() methods

This commit is contained in:
Léa Saviot
2018-09-27 16:32:22 +02:00
committed by Émilie Feral
parent 08eea64c73
commit 48ee8f85d2
2 changed files with 7 additions and 3 deletions

View File

@@ -47,8 +47,12 @@ void DecimalNode::initToMatchSize(size_t goalSize) {
assert(size() == goalSize);
}
static size_t DecimalSize(uint8_t numberOfDigitsInMantissa) {
return sizeof(DecimalNode)+ sizeof(native_uint_t)*numberOfDigitsInMantissa;
}
size_t DecimalNode::size() const {
return sizeof(DecimalNode)+ sizeof(native_uint_t)*m_numberOfDigitsInMantissa;
return DecimalSize(m_numberOfDigitsInMantissa);
}
Expression DecimalNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) {
@@ -320,7 +324,7 @@ Decimal::Decimal(T f) : Number() {
/* We do not get rid of the useless 0s ending the mantissa here because we want
* to keep them if they were entered by the user. */
Decimal::Decimal(Integer m, int e) :
Decimal(sizeof(DecimalNode)+m.numberOfDigits()*sizeof(native_uint_t), m, e) {}
Decimal(DecimalSize(m.numberOfDigits()), m, e) {}
Decimal::Decimal(size_t size, const Integer & m, int e) : Number(TreePool::sharedPool()->createTreeNode<DecimalNode>(size)) {

View File

@@ -55,7 +55,7 @@ Integer RationalNode::denominator() const {
// Tree Node
static inline size_t RationalSize(uint8_t numeratorNumberOfDigits, uint8_t denominatorNumberOfDigits) {
static size_t RationalSize(uint8_t numeratorNumberOfDigits, uint8_t denominatorNumberOfDigits) {
uint8_t realNumeratorSize = numeratorNumberOfDigits > Integer::k_maxNumberOfDigits ? 0 : numeratorNumberOfDigits;
uint8_t realDenominatorSize = denominatorNumberOfDigits > Integer::k_maxNumberOfDigits ? 0 : denominatorNumberOfDigits;
return sizeof(RationalNode) + sizeof(native_uint_t)*(realNumeratorSize + realDenominatorSize);