1#define NONSTD_IMPLEMENTATION
2#include "../nonstd.h"
3
4#include <stdio.h>
5
6SLICE_DEF(int);
7
8// Example function that accepts a slice of integers
9void print_int_slice(slice(int) s) {
10 printf(" Slice (len=%zu): [", s.length);
11 for (size_t i = 0; i < s.length; i++) {
12 printf("%d%s", s.data[i], i < s.length - 1 ? ", " : "");
13 }
14 printf("]\n");
15}
16
17int main(void) {
18 // Example 1: Slice from static array
19 printf("Example 1: Slice from static C array\n");
20 int static_nums[] = {10, 20, 30, 40, 50};
21
22 // Create full slice
23 slice(int) s1 = make_slice(int, static_nums, countof(static_nums));
24 print_int_slice(s1);
25
26 // Create partial slice (subset)
27 slice(int) s2 = make_slice(int, static_nums + 1, 3); // 20, 30, 40
28 print_int_slice(s2);
29 printf("\n");
30
31 // Example 2: Slice from dynamic array
32 printf("Example 2: Slice from dynamic array\n");
33 array(int) dyn_arr;
34 array_init(dyn_arr);
35 for (int i = 1; i <= 5; i++)
36 array_push(dyn_arr, i * 100);
37
38 // Convert entire array to slice
39 slice(int) s3 = array_as_slice(int, dyn_arr);
40 print_int_slice(s3);
41
42 // Create slice from dynamic array data manually
43 slice(int) s4 = make_slice(int, dyn_arr.data + 2, 2); // 300, 400
44 print_int_slice(s4);
45
46 array_free(dyn_arr);
47 printf(" (Dynamic array freed)\n\n");
48
49 // Example 3: Modifying data through slice
50 printf("Example 3: Modifying data through slice\n");
51 int values[] = {1, 1, 1, 1, 1};
52 slice(int) s5 = make_slice(int, values, 5);
53
54 print_int_slice(s5);
55
56 // Modify middle elements
57 s5.data[2] = 99;
58 s5.data[3] = 99;
59
60 printf(" After modification:\n");
61 print_int_slice(s5);
62 printf("\n");
63
64 // Example 4: Slice of strings
65 printf("Example 4: Slice of strings\n");
66 typedef const char *cstr;
67 SLICE_DEF(cstr);
68
69 cstr names[] = {"Alice", "Bob", "Charlie"};
70 slice(cstr) name_slice = make_slice(cstr, names, 3);
71
72 printf(" Names: ");
73 for (size_t i = 0; i < name_slice.length; i++) {
74 printf("%s ", name_slice.data[i]);
75 }
76 printf("\n");
77
78 return 0;
79}