xref: /llvm-project/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/span/main.cpp (revision ea9ff9fac3a6ea77b488081dd9faabc8fe334b46)
1 #include <array>
2 #include <span>
3 #include <stdio.h>
4 #include <string>
5 #include <vector>
6 
7 template <class T, size_t N>
by_ref_and_ptr(std::span<T,N> & ref,std::span<T,N> * ptr)8 void by_ref_and_ptr(std::span<T, N> &ref, std::span<T, N> *ptr) {
9   printf("Stop here to check by ref");
10   return;
11 }
12 
main()13 int main() {
14   std::array numbers = {1, 12, 123, 1234, 12345};
15 
16   using dynamic_string_span = std::span<std::string>;
17 
18   // Test span of ints
19 
20   //   Full view of numbers with static extent
21   std::span numbers_span = numbers;
22 
23   printf("break here");
24 
25   by_ref_and_ptr(numbers_span, &numbers_span);
26 
27   // Test spans of strings
28   std::vector<std::string> strings{"goofy", "is", "smart", "!!!"};
29   strings.reserve(strings.size() + 1);
30 
31   //   Partial view of strings with dynamic extent
32   dynamic_string_span strings_span{std::span{strings}.subspan(2)};
33 
34   auto strings_span_it = strings_span.begin();
35 
36   printf("break here");
37 
38   //   Vector size doesn't increase, span should
39   //   print unchanged and the strings_span_it
40   //   remains valid
41   strings.emplace_back("???");
42 
43   printf("break here");
44 
45   // Now some empty spans
46   std::span<int, 0> static_zero_span;
47   std::span<int> dynamic_zero_span;
48 
49   // Multiple spans
50   std::array span_arr{strings_span, strings_span};
51   std::span<std::span<std::string>, 2> nested = span_arr;
52 
53   printf("break here");
54 
55   return 0; // break here
56 }
57