valarray.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //===------------------------ valarray.cpp --------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is dual licensed under the MIT and the University of Illinois Open
  6. // Source Licenses. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "valarray"
  10. _LIBCPP_BEGIN_NAMESPACE_STD
  11. template valarray<size_t>::valarray(size_t);
  12. template valarray<size_t>::~valarray();
  13. template void valarray<size_t>::resize(size_t, size_t);
  14. void
  15. gslice::__init(size_t __start)
  16. {
  17. valarray<size_t> __indices(__size_.size());
  18. size_t __k = __size_.size() != 0;
  19. for (size_t __i = 0; __i < __size_.size(); ++__i)
  20. __k *= __size_[__i];
  21. __1d_.resize(__k);
  22. if (__1d_.size())
  23. {
  24. __k = 0;
  25. __1d_[__k] = __start;
  26. while (true)
  27. {
  28. size_t __i = __indices.size() - 1;
  29. while (true)
  30. {
  31. if (++__indices[__i] < __size_[__i])
  32. {
  33. ++__k;
  34. __1d_[__k] = __1d_[__k-1] + __stride_[__i];
  35. for (size_t __j = __i + 1; __j != __indices.size(); ++__j)
  36. __1d_[__k] -= __stride_[__j] * (__size_[__j] - 1);
  37. break;
  38. }
  39. else
  40. {
  41. if (__i == 0)
  42. return;
  43. __indices[__i--] = 0;
  44. }
  45. }
  46. }
  47. }
  48. }
  49. _LIBCPP_END_NAMESPACE_STD