1*4bdff4beSrobert //===----------------------------------------------------------------------===// 246035553Spatrick // 346035553Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 446035553Spatrick // See https://llvm.org/LICENSE.txt for license information. 546035553Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 646035553Spatrick // 746035553Spatrick //===----------------------------------------------------------------------===// 846035553Spatrick 9*4bdff4beSrobert #include <valarray> 1046035553Spatrick 1146035553Spatrick _LIBCPP_BEGIN_NAMESPACE_STD 1246035553Spatrick 1346035553Spatrick // These two symbols are part of the v1 ABI but not part of the >=v2 ABI. 1446035553Spatrick #if _LIBCPP_ABI_VERSION == 1 1546035553Spatrick template _LIBCPP_FUNC_VIS valarray<size_t>::valarray(size_t); 1646035553Spatrick template _LIBCPP_FUNC_VIS valarray<size_t>::~valarray(); 1746035553Spatrick #endif 1846035553Spatrick 1946035553Spatrick template void valarray<size_t>::resize(size_t, size_t); 2046035553Spatrick 2146035553Spatrick void __init(size_t __start)2246035553Spatrickgslice::__init(size_t __start) 2346035553Spatrick { 2446035553Spatrick valarray<size_t> __indices(__size_.size()); 2546035553Spatrick size_t __k = __size_.size() != 0; 2646035553Spatrick for (size_t __i = 0; __i < __size_.size(); ++__i) 2746035553Spatrick __k *= __size_[__i]; 2846035553Spatrick __1d_.resize(__k); 2946035553Spatrick if (__1d_.size()) 3046035553Spatrick { 3146035553Spatrick __k = 0; 3246035553Spatrick __1d_[__k] = __start; 3346035553Spatrick while (true) 3446035553Spatrick { 3546035553Spatrick size_t __i = __indices.size() - 1; 3646035553Spatrick while (true) 3746035553Spatrick { 3846035553Spatrick if (++__indices[__i] < __size_[__i]) 3946035553Spatrick { 4046035553Spatrick ++__k; 4146035553Spatrick __1d_[__k] = __1d_[__k-1] + __stride_[__i]; 4246035553Spatrick for (size_t __j = __i + 1; __j != __indices.size(); ++__j) 4346035553Spatrick __1d_[__k] -= __stride_[__j] * (__size_[__j] - 1); 4446035553Spatrick break; 4546035553Spatrick } 4646035553Spatrick else 4746035553Spatrick { 4846035553Spatrick if (__i == 0) 4946035553Spatrick return; 5046035553Spatrick __indices[__i--] = 0; 5146035553Spatrick } 5246035553Spatrick } 5346035553Spatrick } 5446035553Spatrick } 5546035553Spatrick } 5646035553Spatrick 5746035553Spatrick _LIBCPP_END_NAMESPACE_STD 58