#pragma once
#include <stdint.h>
#include "taitank_flex.h"
namespace taitank {
const int kMaxMeasuresCount = 6;
struct MeasureResult {
TaitankSize available_size;
TaitankSize result_size;
MeasureMode width_measure_mode;
MeasureMode height_measure_mode;
FlexLayoutAction layout_action;
};
class TaitankLayoutCache {
public:
TaitankLayoutCache();
virtual ~TaitankLayoutCache();
void CacheResult(TaitankSize available_size, TaitankSize result_size,
TaitankSizeMode measure_mode, FlexLayoutAction layout_action);
MeasureResult *GetCachedMeasureResult(TaitankSize available_size, TaitankSizeMode measure_mode,
FlexLayoutAction layout_action, bool is_measure_node);
MeasureResult *GetCachedLayout();
void ClearCache();
protected:
void InitCache();
MeasureResult *UseLayoutCacheIfPossible(TaitankSize available_size, TaitankSizeMode measure_mode);
MeasureResult *UseMeasureCacheIfPossible(TaitankSize available_size, TaitankSizeMode measure_mode,
FlexLayoutAction layout_action, bool is_measure_node);
private:
MeasureResult cached_layout_;
MeasureResult cached_measures_[kMaxMeasuresCount];
uint32_t next_measure_index_;
};
}