From b657cfb9247f25a604eda6e548a4bf5eafaf8b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Wed, 24 Oct 2018 17:08:37 +0200 Subject: [PATCH] [apps] Reduce number of calls to value() in StorageExpressionModel --- apps/shared/storage_expression_model.cpp | 20 +++++++++++--------- apps/shared/storage_expression_model.h | 5 +++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/apps/shared/storage_expression_model.cpp b/apps/shared/storage_expression_model.cpp index a2816246b..982a1309f 100644 --- a/apps/shared/storage_expression_model.cpp +++ b/apps/shared/storage_expression_model.cpp @@ -29,13 +29,17 @@ void StorageExpressionModel::text(char * buffer, size_t bufferSize) const { Expression StorageExpressionModel::expression(Poincare::Context * context) const { if (m_expression.isUninitialized()) { - m_expression = Expression::ExpressionFromAddress(expressionAddress(), expressionSize()).deepReduce(*context, Preferences::AngleUnit::Degree, true); + assert(!isNull()); + Ion::Storage::Record::Data recordData = value(); + m_expression = Expression::ExpressionFromAddress(expressionAddressForValue(recordData), expressionSizeForValue(recordData)).deepReduce(*context, Preferences::AngleUnit::Degree, true); } return m_expression; } Expression StorageExpressionModel::expressionWithSymbol() const { - return Expression::ExpressionFromAddress(expressionAddress(), expressionSize()); + assert(!isNull()); + Ion::Storage::Record::Data recordData = value(); + return Expression::ExpressionFromAddress(expressionAddressForValue(recordData), expressionSizeForValue(recordData)); } Layout StorageExpressionModel::layout() { @@ -94,7 +98,7 @@ Ion::Storage::Record::ErrorStatus StorageExpressionModel::setExpressionContent(E // Copy the expression if needed if (!expressionToStore.isUninitialized()) { - memcpy(expressionAddress(), expressionToStore.addressInPool(), expressionToStore.size()); + memcpy(expressionAddressForValue(value()), expressionToStore.addressInPool(), expressionToStore.size()); } /* We cannot call tidy here because tidy is a virtual function and does not * do the same thing for all children class. And here we want to delete only @@ -104,14 +108,12 @@ Ion::Storage::Record::ErrorStatus StorageExpressionModel::setExpressionContent(E return error; } -void * StorageExpressionModel::expressionAddress() const { - assert(!isNull()); - return (char *)value().buffer+metaDataSize(); +void * StorageExpressionModel::expressionAddressForValue(Ion::Storage::Record::Data recordData) const { + return (char *)recordData.buffer+metaDataSize(); } -size_t StorageExpressionModel::expressionSize() const { - assert(!isNull()); - return value().size-metaDataSize(); +size_t StorageExpressionModel::expressionSizeForValue(Ion::Storage::Record::Data recordData) const { + return recordData.size-metaDataSize(); } } diff --git a/apps/shared/storage_expression_model.h b/apps/shared/storage_expression_model.h index a0831dcf7..e76931681 100644 --- a/apps/shared/storage_expression_model.h +++ b/apps/shared/storage_expression_model.h @@ -30,12 +30,13 @@ public: virtual Ion::Storage::Record::ErrorStatus setContent(const char * c); Ion::Storage::Record::ErrorStatus setExpressionContent(Poincare::Expression & e); protected: - void * expressionAddress() const; - size_t expressionSize() const; virtual size_t metaDataSize() const = 0; Ion::Storage::Record record() const; mutable Poincare::Expression m_expression; mutable Poincare::Layout m_layout; +private: + void * expressionAddressForValue(Ion::Storage::Record::Data recordData) const; + size_t expressionSizeForValue(Ion::Storage::Record::Data recordData) const; }; }