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 Hinnant gslice::__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