1eb8650a7SLouis Dionne //===----------------------------------------------------------------------===// 23e519524SHoward Hinnant // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63e519524SHoward Hinnant // 73e519524SHoward Hinnant //===----------------------------------------------------------------------===// 83e519524SHoward Hinnant 9*bbb0f2c7SArthur O'Dwyer #include <valarray> 103e519524SHoward Hinnant 113e519524SHoward Hinnant _LIBCPP_BEGIN_NAMESPACE_STD 123e519524SHoward Hinnant 13de329354SRichard Smith // These two symbols are part of the v1 ABI but not part of the >=v2 ABI. 14de329354SRichard Smith #if _LIBCPP_ABI_VERSION == 1 158a033a9eSLouis Dionne template _LIBCPP_FUNC_VIS valarray<size_t>::valarray(size_t); 168a033a9eSLouis Dionne template _LIBCPP_FUNC_VIS valarray<size_t>::~valarray(); 17de329354SRichard Smith #endif 18de329354SRichard Smith 193e519524SHoward Hinnant template void valarray<size_t>::resize(size_t, size_t); 203e519524SHoward Hinnant 213e519524SHoward Hinnant void __init(size_t __start)223e519524SHoward Hinnantgslice::__init(size_t __start) 233e519524SHoward Hinnant { 243e519524SHoward Hinnant valarray<size_t> __indices(__size_.size()); 253e519524SHoward Hinnant size_t __k = __size_.size() != 0; 263e519524SHoward Hinnant for (size_t __i = 0; __i < __size_.size(); ++__i) 273e519524SHoward Hinnant __k *= __size_[__i]; 283e519524SHoward Hinnant __1d_.resize(__k); 293e519524SHoward Hinnant if (__1d_.size()) 303e519524SHoward Hinnant { 313e519524SHoward Hinnant __k = 0; 323e519524SHoward Hinnant __1d_[__k] = __start; 333e519524SHoward Hinnant while (true) 343e519524SHoward Hinnant { 353e519524SHoward Hinnant size_t __i = __indices.size() - 1; 363e519524SHoward Hinnant while (true) 373e519524SHoward Hinnant { 383e519524SHoward Hinnant if (++__indices[__i] < __size_[__i]) 393e519524SHoward Hinnant { 403e519524SHoward Hinnant ++__k; 413e519524SHoward Hinnant __1d_[__k] = __1d_[__k-1] + __stride_[__i]; 423e519524SHoward Hinnant for (size_t __j = __i + 1; __j != __indices.size(); ++__j) 433e519524SHoward Hinnant __1d_[__k] -= __stride_[__j] * (__size_[__j] - 1); 443e519524SHoward Hinnant break; 453e519524SHoward Hinnant } 463e519524SHoward Hinnant else 473e519524SHoward Hinnant { 483e519524SHoward Hinnant if (__i == 0) 493e519524SHoward Hinnant return; 503e519524SHoward Hinnant __indices[__i--] = 0; 513e519524SHoward Hinnant } 523e519524SHoward Hinnant } 533e519524SHoward Hinnant } 543e519524SHoward Hinnant } 553e519524SHoward Hinnant } 563e519524SHoward Hinnant 573e519524SHoward Hinnant _LIBCPP_END_NAMESPACE_STD 58