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}