Skip to content

Commit c3779bd

Browse files
committed
[compute/cker] Reduce duplicated code.
This commit refactors dims storage initialization of Shape. ONE-DCO-1.0-Signed-off-by: ragmani <ragmani0216@gmail.com>
1 parent 8253eb5 commit c3779bd

1 file changed

Lines changed: 16 additions & 44 deletions

File tree

  • runtime/compute/cker/include/cker

runtime/compute/cker/include/cker/Shape.h

Lines changed: 16 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -49,28 +49,13 @@ class Shape
4949
// Otherwise, it uses a dynamic vector.
5050
explicit Shape(int dimensions_count) : _size(dimensions_count)
5151
{
52-
if (dimensions_count <= kMaxSmallSize)
53-
{
54-
dims_ = std::array<int32_t, kMaxSmallSize>{};
55-
}
56-
else
57-
{
58-
dims_ = std::vector<int32_t>(dimensions_count);
59-
}
52+
initStorage(dimensions_count);
6053
}
6154

6255
// Constructor that creates a shape of given size and fills all dimensions with "value".
6356
Shape(int shape_size, int32_t value) : _size(0)
6457
{
65-
if (shape_size <= kMaxSmallSize)
66-
{
67-
dims_ = std::array<int32_t, kMaxSmallSize>{};
68-
}
69-
else
70-
{
71-
dims_ = std::vector<int32_t>(shape_size);
72-
}
73-
58+
initStorage(shape_size);
7459
for (int i = 0; i < shape_size; ++i)
7560
{
7661
SetDim(i, value);
@@ -80,16 +65,7 @@ class Shape
8065
// Constructor that creates a shape from an array of dimension data.
8166
Shape(int dimensions_count, const int32_t *dims_data) : _size(0)
8267
{
83-
// Explicitly initialize dims_ based on dimensions_count to avoid uninitialized state.
84-
if (dimensions_count <= kMaxSmallSize)
85-
{
86-
dims_ = std::array<int32_t, kMaxSmallSize>{};
87-
}
88-
else
89-
{
90-
dims_ = std::vector<int32_t>(dimensions_count);
91-
}
92-
68+
initStorage(dimensions_count);
9369
ReplaceWith(dimensions_count, dims_data);
9470
}
9571

@@ -98,18 +74,7 @@ class Shape
9874
Shape(const std::initializer_list<int> init_list) : _size(0)
9975
{
10076
const auto size = static_cast<int>(std::distance(init_list.begin(), init_list.end()));
101-
102-
// Explicitly initialize dims_ based on the initializer list size to prevent
103-
// "maybe uninitialized" warnings when BuildFrom() is invoked.
104-
if (size <= kMaxSmallSize)
105-
{
106-
dims_ = std::array<int32_t, kMaxSmallSize>{};
107-
}
108-
else
109-
{
110-
dims_ = std::vector<int32_t>(size);
111-
}
112-
77+
initStorage(size);
11378
BuildFrom(init_list);
11479
}
11580

@@ -207,10 +172,7 @@ class Shape
207172
// initialize dims_ explicitly based on dimensions_count to ensure it is in a valid state.
208173
if (dims_.valueless_by_exception())
209174
{
210-
if (dimensions_count <= kMaxSmallSize)
211-
dims_ = std::array<int32_t, kMaxSmallSize>{};
212-
else
213-
dims_ = std::vector<int32_t>(dimensions_count);
175+
initStorage(dimensions_count);
214176
}
215177

216178
std::vector<int32_t> oldDims;
@@ -304,21 +266,31 @@ class Shape
304266
bool operator!=(const Shape &comp) const { return !((*this) == comp); }
305267

306268
private:
269+
// Helper function: initialize dims_ storage based on the number of dimensions.
270+
inline void initStorage(int dimensions_count)
271+
{
272+
if (dimensions_count <= kMaxSmallSize)
273+
dims_ = std::array<int32_t, kMaxSmallSize>{};
274+
else
275+
dims_ = std::vector<int32_t>(dimensions_count);
276+
}
277+
307278
// For use only by ExtendedShape(), written to guarantee (return-value) copy
308279
// elision in C++17.
309280
// This creates a shape padded to the desired size with the specified value.
310281
Shape(int new_shape_size, const Shape &shape, int pad_value) : _size(0)
311282
{
312283
assert(new_shape_size >= shape.DimensionsCount());
313284
assert(new_shape_size <= kMaxSmallSize);
314-
Resize(new_shape_size);
285+
initStorage(new_shape_size);
315286
const int size_increase = new_shape_size - shape.DimensionsCount();
316287
for (int i = 0; i < size_increase; ++i)
317288
{
318289
SetDim(i, pad_value);
319290
}
320291
std::memcpy(DimsData() + size_increase, shape.DimsData(),
321292
sizeof(int32_t) * shape.DimensionsCount());
293+
_size = new_shape_size;
322294
}
323295

324296
int32_t _size;

0 commit comments

Comments
 (0)