Skip to content

Commit

Permalink
De-duplicate the logic for counting attachments
Browse files Browse the repository at this point in the history
  • Loading branch information
cubuspl42 committed Jan 29, 2024
1 parent cfc0ba0 commit 16479a3
Showing 1 changed file with 18 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@ using namespace facebook::jni;

namespace facebook::react {

static int countAttachments(const AttributedString &attributedString) {
int count = 0;

for (const auto& fragment : attributedString.getFragments()) {
if (fragment.isAttachment()) {
count++;
}
}

return count;
}

Size measureAndroidComponent(
const ContextContainer::Shared& contextContainer,
Tag rootTag,
Expand Down Expand Up @@ -274,14 +286,9 @@ TextMeasurement TextLayoutManager::doMeasure(
LayoutConstraints layoutConstraints) const {
layoutConstraints.maximumSize.height = std::numeric_limits<Float>::infinity();

int attachmentsCount = 0;
for (const auto& fragment : attributedString.getFragments()) {
if (fragment.isAttachment()) {
attachmentsCount++;
}
}
const int attachmentCount = countAttachments(attributedString);
auto env = Environment::current();
auto attachmentPositions = env->NewFloatArray(attachmentsCount * 2);
auto attachmentPositions = env->NewFloatArray(attachmentCount * 2);

auto minimumSize = layoutConstraints.minimumSize;
auto maximumSize = layoutConstraints.maximumSize;
Expand All @@ -304,7 +311,7 @@ TextMeasurement TextLayoutManager::doMeasure(
env->GetFloatArrayElements(attachmentPositions, nullptr);

auto attachments = TextMeasurement::Attachments{};
if (attachmentsCount > 0) {
if (attachmentCount > 0) {
const folly::dynamic& fragments = serializedAttributedString["fragments"];
int attachmentIndex = 0;
for (const auto& fragment : fragments) {
Expand Down Expand Up @@ -338,14 +345,9 @@ TextMeasurement TextLayoutManager::doMeasureMapBuffer(
LayoutConstraints layoutConstraints) const {
layoutConstraints.maximumSize.height = std::numeric_limits<Float>::infinity();

int attachmentsCount = 0;
for (const auto& fragment : attributedString.getFragments()) {
if (fragment.isAttachment()) {
attachmentsCount++;
}
}
const int attachmentCount = countAttachments(attributedString);
auto env = Environment::current();
auto attachmentPositions = env->NewFloatArray(attachmentsCount * 2);
auto attachmentPositions = env->NewFloatArray(attachmentCount * 2);

auto minimumSize = layoutConstraints.minimumSize;
auto maximumSize = layoutConstraints.maximumSize;
Expand All @@ -369,7 +371,7 @@ TextMeasurement TextLayoutManager::doMeasureMapBuffer(
env->GetFloatArrayElements(attachmentPositions, nullptr);

auto attachments = TextMeasurement::Attachments{};
if (attachmentsCount > 0) {
if (attachmentCount > 0) {
int attachmentIndex = 0;
for (const auto& fragment : attributedString.getFragments()) {
if (fragment.isAttachment()) {
Expand Down

0 comments on commit 16479a3

Please sign in to comment.