99#include < yoga/node/Node.h>
1010#include < yoga/style/GridTrack.h>
1111#include < yoga/style/StyleSizeLength.h>
12+ #include < memory>
1213#include < vector>
1314
1415using namespace facebook ::yoga;
1516
16- // Internal representation of a grid track value
1717struct YGGridTrackValue {
1818 enum class Type { Points, Percent, Fr, Auto, MinMax };
1919
2020 Type type;
2121 float value;
22- YGGridTrackValue* minValue;
23- YGGridTrackValue* maxValue;
22+ std::unique_ptr< YGGridTrackValue> minValue;
23+ std::unique_ptr< YGGridTrackValue> maxValue;
2424
25- YGGridTrackValue (Type t, float v = 0 .0f )
26- : type(t), value(v), minValue(nullptr ), maxValue(nullptr ) {}
25+ YGGridTrackValue (Type t, float v = 0 .0f ) : type(t), value(v) {}
2726
28- YGGridTrackValue (YGGridTrackValue* min, YGGridTrackValue* max)
29- : type(Type::MinMax), value(0 .0f ), minValue(min), maxValue(max) {}
30-
31- ~YGGridTrackValue () {
32- // MinMax owns its min/max values
33- if (type == Type::MinMax) {
34- delete minValue;
35- delete maxValue;
36- }
37- }
27+ YGGridTrackValue (
28+ std::unique_ptr<YGGridTrackValue> min,
29+ std::unique_ptr<YGGridTrackValue> max)
30+ : type(Type::MinMax),
31+ value (0 .0f ),
32+ minValue(std::move(min)),
33+ maxValue(std::move(max)) {}
3834
3935 StyleSizeLength toStyleSizeLength () const {
4036 switch (type) {
@@ -54,27 +50,20 @@ struct YGGridTrackValue {
5450 }
5551};
5652
57- // Internal representation of a grid track list
5853struct YGGridTrackList {
59- std::vector<YGGridTrackValue* > tracks;
54+ std::vector<std::unique_ptr< YGGridTrackValue> > tracks;
6055
6156 YGGridTrackList () = default ;
6257 YGGridTrackList (const YGGridTrackList&) = delete ;
6358 YGGridTrackList& operator =(const YGGridTrackList&) = delete ;
6459 YGGridTrackList (YGGridTrackList&&) = delete ;
6560 YGGridTrackList& operator =(YGGridTrackList&&) = delete ;
6661
67- ~YGGridTrackList () {
68- for (auto * track : tracks) {
69- delete track;
70- }
71- }
72-
7362 GridTrackList toGridTrackList () const {
7463 GridTrackList result;
7564 result.reserve (tracks.size ());
7665
77- for (auto * track : tracks) {
66+ for (const auto & track : tracks) {
7867 if (track->type == YGGridTrackValue::Type::MinMax) {
7968 auto min = track->minValue ->toStyleSizeLength ();
8069 auto max = track->maxValue ->toStyleSizeLength ();
@@ -116,28 +105,31 @@ void YGGridTrackListAddTrack(
116105 YGGridTrackListRef list,
117106 YGGridTrackValueRef trackValue) {
118107 if (list && trackValue) {
119- list->tracks .push_back (trackValue);
108+ list->tracks .push_back (std::unique_ptr<YGGridTrackValue>( trackValue) );
120109 }
121110}
122111
123- YGGridTrackValueRef YGPoints (float points) {
112+ YGGridTrackValueRef YGGridTrackPoints (float points) {
124113 return new YGGridTrackValue (YGGridTrackValue::Type::Points, points);
125114}
126115
127- YGGridTrackValueRef YGPercent (float percent) {
116+ YGGridTrackValueRef YGGridTrackPercent (float percent) {
128117 return new YGGridTrackValue (YGGridTrackValue::Type::Percent, percent);
129118}
130119
131- YGGridTrackValueRef YGFr (float fr) {
120+ YGGridTrackValueRef YGGridTrackFr (float fr) {
132121 return new YGGridTrackValue (YGGridTrackValue::Type::Fr, fr);
133122}
134123
135- YGGridTrackValueRef YGAuto () {
124+ YGGridTrackValueRef YGGridTrackAuto () {
136125 return new YGGridTrackValue (YGGridTrackValue::Type::Auto);
137126}
138127
139- YGGridTrackValueRef YGMinMax (YGGridTrackValueRef min, YGGridTrackValueRef max) {
140- return new YGGridTrackValue (min, max);
128+ YGGridTrackValueRef
129+ YGGridTrackMinMax (YGGridTrackValueRef min, YGGridTrackValueRef max) {
130+ return new YGGridTrackValue (
131+ std::unique_ptr<YGGridTrackValue>(min),
132+ std::unique_ptr<YGGridTrackValue>(max));
141133}
142134
143135void YGNodeStyleSetGridTemplateRows (
0 commit comments