@@ -90,3 +90,57 @@ When you encode the size of the sequence viewed in the Span value, Span instance
9090
9191[ ![ 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 )
9292
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