diff --git a/extension/pytree/aten_util/ivalue_util.cpp b/extension/pytree/aten_util/ivalue_util.cpp index c4d11c13ee0..888c9829523 100644 --- a/extension/pytree/aten_util/ivalue_util.cpp +++ b/extension/pytree/aten_util/ivalue_util.cpp @@ -131,8 +131,8 @@ std::pair, std::unique_ptr>> flatten( auto p = flatten(c); std::vector tensors; - for (int i = 0; i < p.first.size(); ++i) { - tensors.emplace_back(p.first[i]->toTensor()); + for (const auto& item : p.first) { + tensors.emplace_back(item->toTensor()); } return {tensors, std::move(p.second)}; diff --git a/extension/pytree/pytree.h b/extension/pytree/pytree.h index 515ba8b7402..b0f2ca1fab6 100644 --- a/extension/pytree/pytree.h +++ b/extension/pytree/pytree.h @@ -431,6 +431,22 @@ struct arr { return data_.get(); } + T* begin() { + return data_.get(); + } + + T* end() { + return begin() + size(); + } + + const T* begin() const { + return data_.get(); + } + + const T* end() const { + return begin() + size(); + } + inline size_t size() const { return n_; } diff --git a/extension/pytree/test/test_pytree.cpp b/extension/pytree/test/test_pytree.cpp index 0101bca3f55..885481b87cd 100644 --- a/extension/pytree/test/test_pytree.cpp +++ b/extension/pytree/test/test_pytree.cpp @@ -11,6 +11,7 @@ #include #include +using ::executorch::extension::pytree::arr; using ::executorch::extension::pytree::ContainerHandle; using ::executorch::extension::pytree::Key; using ::executorch::extension::pytree::Kind; @@ -18,6 +19,19 @@ using ::executorch::extension::pytree::unflatten; using Leaf = int32_t; +TEST(PyTreeTest, ArrBasic) { + arr x(5); + ASSERT_EQ(x.size(), 5); + for (int ii = 0; ii < x.size(); ++ii) { + x[ii] = 2 * ii; + } + int idx = 0; + for (const auto item : x) { + EXPECT_EQ(item, 2 * idx); + ++idx; + } +} + TEST(PyTreeTest, List) { Leaf items[2] = {11, 12}; std::string spec = "L2#1#1($,$)";