Skip to content

Commit 3ee5c36

Browse files
committed
Span: Add example
1 parent b729af0 commit 3ee5c36

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

docs/reference/api/platform/Span.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)