/** * Copyright (c) 2017-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.litho; import java.util.ArrayList; import java.util.List; /** * A lightweight representation of a layout node, used to cache measurements between two Layout tree * calculations. */ class DiffNode implements Cloneable { static final int UNSPECIFIED = -1; private LayoutOutput mContent; private LayoutOutput mBackground; private LayoutOutput mForeground; private LayoutOutput mBorder; private LayoutOutput mHost; private VisibilityOutput mVisibilityOutput; private Component mComponent; private float mLastMeasuredWidth; private float mLastMeasuredHeight; private int mLastWidthSpec; private int mLastHeightSpec; private List<DiffNode> mChildren; DiffNode() { mChildren = new ArrayList<>(4); } int getChildCount() { return mChildren == null ? 0 : mChildren.size(); } DiffNode getChildAt(int i) { return mChildren.get(i); } Component getComponent() { return mComponent; } void setComponent(Component component) { mComponent = component; } float getLastMeasuredWidth() { return mLastMeasuredWidth; } void setLastMeasuredWidth(float lastMeasuredWidth) { mLastMeasuredWidth = lastMeasuredWidth; } float getLastMeasuredHeight() { return mLastMeasuredHeight; } void setLastMeasuredHeight(float lastMeasuredHeight) { mLastMeasuredHeight = lastMeasuredHeight; } int getLastWidthSpec() { return mLastWidthSpec; } int getLastHeightSpec() { return mLastHeightSpec; } void setLastWidthSpec(int widthSpec) { mLastWidthSpec = widthSpec; } void setLastHeightSpec(int heightSpec) { mLastHeightSpec = heightSpec; } List<DiffNode> getChildren() { return mChildren; } void addChild(DiffNode node) { mChildren.add(node); } LayoutOutput getContent() { return mContent; } void setContent(LayoutOutput content) { mContent = content; } VisibilityOutput getVisibilityOutput() { return mVisibilityOutput; } void setVisibilityOutput(VisibilityOutput visibilityOutput) { mVisibilityOutput = visibilityOutput; } LayoutOutput getBackground() { return mBackground; } void setBackground(LayoutOutput background) { mBackground = background; } LayoutOutput getForeground() { return mForeground; } void setForeground(LayoutOutput foreground) { mForeground = foreground; } LayoutOutput getBorder() { return mBorder; } void setBorder(LayoutOutput border) { mBorder = border; } LayoutOutput getHost() { return mHost; } void setHost(LayoutOutput host) { mHost = host; } void release() { mComponent = null; mContent = null; mBackground = null; mForeground = null; mHost = null; mVisibilityOutput = null; mLastMeasuredWidth = UNSPECIFIED; mLastMeasuredHeight = UNSPECIFIED; mLastWidthSpec = UNSPECIFIED; mLastHeightSpec = UNSPECIFIED; for (int i = 0, size = mChildren.size(); i < size; i++) { ComponentsPools.release(mChildren.get(i)); } mChildren.clear(); } }