Commit 66e1e756 authored by Kirill Smelkov's avatar Kirill Smelkov

libgolang: Provide select(vector<_selcase>)

We already provide select for array and std::initializer_list. However
when cases are constructed at runtime dynamically both array and
initializer_list are not convenient to use.

-> Provide select() overload that accepts vector<_selcase>.

This functionality will soon be used in C version of context package.
parent 85df1e40
...@@ -295,6 +295,7 @@ LIBGOLANG_API extern void (*_tblockforever)(void); ...@@ -295,6 +295,7 @@ LIBGOLANG_API extern void (*_tblockforever)(void);
#include <memory> #include <memory>
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
#include <vector>
namespace golang { namespace golang {
...@@ -442,6 +443,11 @@ int select(const _selcase (&casev)[N]) { ...@@ -442,6 +443,11 @@ int select(const _selcase (&casev)[N]) {
return _chanselect(&casev[0], N); return _chanselect(&casev[0], N);
} }
static inline // select(vector<casev>)
int select(const std::vector<_selcase> &casev) {
return _chanselect(&casev[0], casev.size());
}
// defer(f) mimics `defer f()` from golang. // defer(f) mimics `defer f()` from golang.
// NOTE contrary to Go f is called at end of current scope, not function. // NOTE contrary to Go f is called at end of current scope, not function.
#define defer(f) golang::_deferred _defer_ ## __COUNTER__ (f) #define defer(f) golang::_deferred _defer_ ## __COUNTER__ (f)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment