@@ -90,3 +90,57 @@ When you encode the size of the sequence viewed in the Span value, Span instance
90
90
91
91
[ ![ View code] ( https://www.mbed.com/embed/?type=library )] ( https://os-doc-builder.test.mbed.com/docs/development/mbed-os-api-doxy/class_span.html )
92
92
93
+
94
+ ### Span example
95
+
96
+ ```
97
+ template<typename T>
98
+ Span<const T> split(Span<const T> &range, const T& separator) {
99
+ const ptrdiff_t out_of_range = range.size();
100
+
101
+ ptrdiff_t start;
102
+ for (start = 0; start != out_of_range && range[start] == separator; ++start) { }
103
+
104
+ ptrdiff_t last;
105
+ for (last = start; last != out_of_range && range[last] != separator; ++last) { }
106
+
107
+ Span<const T> result = range.subspan(start, last - start);
108
+ range = range.subspan(last);
109
+ return result;
110
+ }
111
+
112
+ Span<const char> buffer("Hello World! Hello mbed-os!");
113
+ while(buffer.empty() == false) {
114
+ Span<const char> token = split(buffer, ' ');
115
+ printf("token: %.*s\r\n", token.size(), token.data());
116
+ }
117
+
118
+ //------------------------------------------------------------------------------
119
+ // Equivalent C-like code
120
+
121
+ template<typename T>
122
+ void split(const T** in_ptr, ptrdiff_t* in_size, const T** token_ptr, ptrdiff_t* token_size, const T& separator) {
123
+ const ptrdiff_t out_of_range = *in_size;
124
+
125
+ ptrdiff_t start;
126
+ for (start = 0; start != out_of_range && (*in_ptr)[start] == separator; ++start) { }
127
+
128
+ ptrdiff_t last;
129
+ for (last = start; last != out_of_range && (*in_ptr)[last] != separator; ++last) { }
130
+
131
+ *token_ptr = *in_ptr + start;
132
+ *token_size = last - start;
133
+
134
+ *in_size = *in_size - last;
135
+ *in_ptr = *in_ptr + last;
136
+ }
137
+
138
+ const char* buffer_ptr = str;
139
+ ptrdiff_t buffer_size = sizeof(str);
140
+ while (buffer_size) {
141
+ const char* token_ptr = NULL;
142
+ ptrdiff_t token_size = 0;
143
+ split(&buffer_ptr, &buffer_size, &token_ptr, &token_size, ' ');
144
+ printf("token: %.*s\r\n", token_size, token_ptr);
145
+ }
146
+ ```
0 commit comments