Skip to content

Commit 48bf1e3

Browse files
committed
Add maximum_results parameter to resolver::results()
1 parent 220b2eb commit 48bf1e3

File tree

3 files changed

+13
-15
lines changed

3 files changed

+13
-15
lines changed

src/lsl_resolver_c.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,10 @@ LIBLSL_C_API lsl_continuous_resolver lsl_create_continuous_resolver_bypred(const
8686
*/
8787
LIBLSL_C_API int32_t lsl_resolver_results(lsl_continuous_resolver res, lsl_streaminfo *buffer, uint32_t buffer_elements) {
8888
try {
89-
// query it
90-
resolver_impl *resolver = res;
91-
std::vector<stream_info_impl> tmp = resolver->results();
89+
std::vector<stream_info_impl> tmp = res->results(buffer_elements);
9290
// allocate new stream_info_impl's and assign to the buffer
93-
uint32_t result = buffer_elements<tmp.size() ? buffer_elements : (uint32_t)tmp.size();
94-
for (uint32_t k = 0; k < result; k++) buffer[k] = new stream_info_impl(tmp[k]);
95-
return result;
91+
for (uint32_t k = 0; k < tmp.size(); k++) buffer[k] = new stream_info_impl(tmp[k]);
92+
return tmp.size();
9693
} catch(std::exception &e) {
9794
LOG_F(WARNING, "Unexpected error querying lsl_resolver_results: %s", e.what());
9895
return lsl_internal_error;

src/resolver_impl.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,18 @@ void resolver_impl::resolve_continuous(const std::string &query, double forget_a
126126
}
127127

128128
/// Get the current set of results (e.g., during continuous operation).
129-
std::vector<stream_info_impl> resolver_impl::results() {
129+
std::vector<stream_info_impl> resolver_impl::results(uint32_t max_results) {
130130
std::vector<stream_info_impl> output;
131131
lslboost::lock_guard<lslboost::mutex> lock(results_mut_);
132132
double expired_before = lsl_clock() - forget_after_;
133-
for(result_container::iterator i=results_.begin(); i!=results_.end();) {
134-
if (i->second.second < expired_before) {
135-
result_container::iterator tmp = i++;
136-
results_.erase(tmp);
137-
} else {
138-
output.push_back(i->second.first);
139-
i++;
133+
134+
for (auto it = results_.begin(); it != results_.end();) {
135+
if (it->second.second < expired_before)
136+
it = results_.erase(it);
137+
else {
138+
if (output.size() < max_results)
139+
output.push_back(it->second.first);
140+
it++;
140141
}
141142
}
142143
return output;

src/resolver_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ namespace lsl {
7575
void resolve_continuous(const std::string &query, double forget_after=5.0);
7676

7777
/// Get the current set of results (e.g., during continuous operation).
78-
std::vector<stream_info_impl> results();
78+
std::vector<stream_info_impl> results(uint32_t max_results = 4294967295);
7979

8080
/// Tear down any ongoing operations and render the resolver unusable.
8181
/// This can be used to cancel a blocking resolve_oneshot() from another thread (e.g., to initiate teardown of the object).

0 commit comments

Comments
 (0)