sccn / liblsl

C++ lsl library for multi-modal time-synched data transmission over the local network
Other
115 stars 67 forks source link

Add optional move support to C++ API types #37

Closed tstenner closed 4 years ago

tstenner commented 5 years ago

For compilers with enabled C++11 support, this adds move constructors to the header classes. This allows passing objects to be passed into classes while ensuring that the underlying objects are deleted when they go out of scope.

Example:


struct Streampair {
    lsl::stream_outlet out_;
    lsl::stream_inlet in_;

    Streampair(lsl::stream_outlet &&out, lsl::stream_inlet &&in)
        : out_(std::move(out)), in_(std::move(in)) {}
};

static Streampair create_streampair(const lsl::stream_info &info) {
    lsl::stream_outlet out(info);
    auto found_stream_info(lsl::resolve_stream("name", info.name(), 1, 2.0));
    if (found_stream_info.empty()) throw std::runtime_error("outlet not found");
    lsl::stream_inlet in(found_stream_info[0]);

    in.open_stream(2);
    out.wait_for_consumers(2);
    return Streampair(std::move(out), std::move(in));
}

The second commit adds a unit test that checks both move constructor, assignment operators and destructors.