@@ -17,17 +17,7 @@ using namespace lsl;
1717* The recommended default value is 5.0.
1818*/
1919LIBLSL_C_API lsl_continuous_resolver lsl_create_continuous_resolver (double forget_after) {
20- try {
21- // create a new resolver
22- resolver_impl *resolver = new resolver_impl ();
23- // start it with the given query
24- std::ostringstream os; os << " session_id='" << api_config::get_instance ()->session_id () << " '" ;
25- resolver->resolve_continuous (os.str (),forget_after);
26- return resolver;
27- } catch (std::exception &e) {
28- LOG_F (ERROR, " Error while creating a continuous_resolver: %s" , e.what ());
29- return nullptr ;
30- }
20+ return resolver_impl::create_resolver (forget_after);
3121}
3222
3323/* *
@@ -40,17 +30,7 @@ LIBLSL_C_API lsl_continuous_resolver lsl_create_continuous_resolver(double forge
4030* The recommended default value is 5.0.
4131*/
4232LIBLSL_C_API lsl_continuous_resolver lsl_create_continuous_resolver_byprop (const char *prop, const char *value, double forget_after) {
43- try {
44- // create a new resolver
45- resolver_impl *resolver = new resolver_impl ();
46- // start it with the given query
47- std::ostringstream os; os << " session_id='" << api_config::get_instance ()->session_id () << " ' and " << prop << " ='" << value << " '" ;
48- resolver->resolve_continuous (os.str (),forget_after);
49- return resolver;
50- } catch (std::exception &e) {
51- LOG_F (ERROR, " Error while creating a continuous_resolver: %s" , e.what ());
52- return nullptr ;
53- }
33+ return resolver_impl::create_resolver (forget_after, prop, value);
5434}
5535
5636/* *
@@ -62,17 +42,7 @@ LIBLSL_C_API lsl_continuous_resolver lsl_create_continuous_resolver_byprop(const
6242* The recommended default value is 5.0.
6343*/
6444LIBLSL_C_API lsl_continuous_resolver lsl_create_continuous_resolver_bypred (const char *pred, double forget_after) {
65- try {
66- // create a new resolver
67- resolver_impl *resolver = new resolver_impl ();
68- // start it with the given query
69- std::ostringstream os; os << " session_id='" << api_config::get_instance ()->session_id () << " ' and " << pred;
70- resolver->resolve_continuous (os.str (),forget_after);
71- return resolver;
72- } catch (std::exception &e) {
73- LOG_F (ERROR, " Error while creating a continuous_resolver: %s" , e.what ());
74- return nullptr ;
75- }
45+ return resolver_impl::create_resolver (forget_after, pred, nullptr );
7646}
7747
7848/* *
@@ -86,13 +56,10 @@ LIBLSL_C_API lsl_continuous_resolver lsl_create_continuous_resolver_bypred(const
8656*/
8757LIBLSL_C_API int32_t lsl_resolver_results (lsl_continuous_resolver res, lsl_streaminfo *buffer, uint32_t buffer_elements) {
8858 try {
89- // query it
90- resolver_impl *resolver = res;
91- std::vector<stream_info_impl> tmp = resolver->results ();
59+ std::vector<stream_info_impl> tmp = res->results (buffer_elements);
9260 // 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;
61+ for (uint32_t k = 0 ; k < tmp.size (); k++) buffer[k] = new stream_info_impl (tmp[k]);
62+ return tmp.size ();
9663 } catch (std::exception &e) {
9764 LOG_F (WARNING, " Unexpected error querying lsl_resolver_results: %s" , e.what ());
9865 return lsl_internal_error;
@@ -162,12 +129,8 @@ LIBLSL_C_API int32_t lsl_resolve_all(lsl_streaminfo *buffer, uint32_t buffer_ele
162129*/
163130LIBLSL_C_API int32_t lsl_resolve_byprop (lsl_streaminfo *buffer, uint32_t buffer_elements, const char *prop, const char *value, int32_t minimum, double timeout) {
164131 try {
165- // create a new resolver
166- resolver_impl resolver;
167- // build a new query.
168- std::ostringstream os; os << " session_id='" << api_config::get_instance ()->session_id () << " ' and " << prop << " ='" << value << " '" ;
169- // invoke it
170- std::vector<stream_info_impl> tmp = resolver.resolve_oneshot (os.str (),minimum,timeout);
132+ std::string query{resolver_impl::build_query (prop, value)};
133+ auto tmp = resolver_impl ().resolve_oneshot (query, minimum, timeout);
171134 // allocate new stream_info_impl's and assign to the buffer
172135 uint32_t result = buffer_elements<tmp.size () ? buffer_elements : (uint32_t )tmp.size ();
173136 for (uint32_t k = 0 ; k < result; k++) buffer[k] = new stream_info_impl (tmp[k]);
@@ -195,12 +158,8 @@ LIBLSL_C_API int32_t lsl_resolve_byprop(lsl_streaminfo *buffer, uint32_t buffer_
195158*/
196159LIBLSL_C_API int32_t lsl_resolve_bypred (lsl_streaminfo *buffer, uint32_t buffer_elements, const char *pred, int32_t minimum, double timeout) {
197160 try {
198- // create a new resolver
199- resolver_impl resolver;
200- // build a new query.
201- std::ostringstream os; os << " session_id='" << api_config::get_instance ()->session_id () << " ' and " << pred;
202- // invoke it
203- std::vector<stream_info_impl> tmp = resolver.resolve_oneshot (os.str (),minimum,timeout);
161+ std::string query{resolver_impl::build_query (pred)};
162+ auto tmp = resolver_impl ().resolve_oneshot (query, minimum, timeout);
204163 // allocate new stream_info_impl's and assign to the buffer
205164 uint32_t result = buffer_elements<tmp.size () ? buffer_elements : (uint32_t )tmp.size ();
206165 for (uint32_t k = 0 ; k < result; k++) buffer[k] = new stream_info_impl (tmp[k]);
0 commit comments