Skip to content

Commit 0697d3f

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 0697d3f

1 file changed

Lines changed: 16 additions & 47 deletions

File tree

  • runtime/compute/cker/include/cker

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

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -47,30 +47,12 @@ class Shape
4747
// Constructor that takes a dimension count.
4848
// If dimensions_count <= kMaxSmallSize, it uses a fixed-size array.
4949
// Otherwise, it uses a dynamic vector.
50-
explicit Shape(int dimensions_count) : _size(dimensions_count)
51-
{
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-
}
60-
}
50+
explicit Shape(int dimensions_count) : _size(dimensions_count) { initStorage(dimensions_count); }
6151

6252
// Constructor that creates a shape of given size and fills all dimensions with "value".
6353
Shape(int shape_size, int32_t value) : _size(0)
6454
{
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-
55+
initStorage(shape_size);
7456
for (int i = 0; i < shape_size; ++i)
7557
{
7658
SetDim(i, value);
@@ -80,16 +62,7 @@ class Shape
8062
// Constructor that creates a shape from an array of dimension data.
8163
Shape(int dimensions_count, const int32_t *dims_data) : _size(0)
8264
{
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-
65+
initStorage(dimensions_count);
9366
ReplaceWith(dimensions_count, dims_data);
9467
}
9568

@@ -98,18 +71,7 @@ class Shape
9871
Shape(const std::initializer_list<int> init_list) : _size(0)
9972
{
10073
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-
74+
initStorage(size);
11375
BuildFrom(init_list);
11476
}
11577

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

216175
std::vector<int32_t> oldDims;
@@ -304,21 +263,31 @@ class Shape
304263
bool operator!=(const Shape &comp) const { return !((*this) == comp); }
305264

306265
private:
266+
// Helper function: initialize dims_ storage based on the number of dimensions.
267+
inline void initStorage(int dimensions_count)
268+
{
269+
if (dimensions_count <= kMaxSmallSize)
270+
dims_ = std::array<int32_t, kMaxSmallSize>{};
271+
else
272+
dims_ = std::vector<int32_t>(dimensions_count);
273+
}
274+
307275
// For use only by ExtendedShape(), written to guarantee (return-value) copy
308276
// elision in C++17.
309277
// This creates a shape padded to the desired size with the specified value.
310278
Shape(int new_shape_size, const Shape &shape, int pad_value) : _size(0)
311279
{
312280
assert(new_shape_size >= shape.DimensionsCount());
313281
assert(new_shape_size <= kMaxSmallSize);
314-
Resize(new_shape_size);
282+
initStorage(new_shape_size);
315283
const int size_increase = new_shape_size - shape.DimensionsCount();
316284
for (int i = 0; i < size_increase; ++i)
317285
{
318286
SetDim(i, pad_value);
319287
}
320288
std::memcpy(DimsData() + size_increase, shape.DimsData(),
321289
sizeof(int32_t) * shape.DimensionsCount());
290+
_size = new_shape_size;
322291
}
323292

324293
int32_t _size;

0 commit comments

Comments
 (0)