WIP/cpp -> next #31

クローズ
crtxcrWIP/cpp から next への 16 コミットのマージを希望しています
2個のファイルの変更4行の追加3行の削除
コミット 72a3b041d9 の変更だけを表示しています - すべてのコミットを表示

ファイルの表示

@ -119,7 +119,7 @@ static int do_clone(int (*clonefn)(void *), void *launcharg)
} }
template<typename T, typename U, typename ... Args> template<typename T, typename U, typename ... Args>
T exile_launch_trivial(struct exile_policy *policy, U fn, Args && ... args) typename std::enable_if_t<std::is_trivially_copyable_v<T>, T> exile_launch(struct exile_policy *policy, U fn, Args && ... args)
{ {
size_t mapsize = sizeof(T); size_t mapsize = sizeof(T);
T * sharedbuf = (T *) mmap(NULL, mapsize , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); T * sharedbuf = (T *) mmap(NULL, mapsize , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
@ -145,7 +145,8 @@ T exile_launch_trivial(struct exile_policy *policy, U fn, Args && ... args)
template<typename T, typename U, typename ... Args> template<typename T, typename U, typename ... Args>
T exile_launch(struct exile_policy *policy, const std::function<size_t (const T &, char *, size_t)> &serializer, const std::function<T(const char *, size_t)> &deserializer, U fn, Args && ... args) typename std::enable_if_t<!std::is_trivially_copyable_v<T> && std::is_copy_constructible_v<T>, T>
exile_launch(struct exile_policy *policy, const std::function<size_t (const T &, char *, size_t)> &serializer, const std::function<T(const char *, size_t)> &deserializer, U fn, Args && ... args)
{ {
size_t mapsize = EXILE_MMAP_SIZE; size_t mapsize = EXILE_MMAP_SIZE;
char *sharedbuf = (char *) mmap(NULL, mapsize , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); char *sharedbuf = (char *) mmap(NULL, mapsize , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);

ファイルの表示

@ -35,7 +35,7 @@ int incrementer(int arg)
int test_exile_launch_trivial() int test_exile_launch_trivial()
{ {
int u = 22; int u = 22;
int result = exile_launch_trivial<int>(exile_init_policy(), &incrementer, u); int result = exile_launch<int>(exile_init_policy(), &incrementer, u);
assert(result == 23); assert(result == 23);
return 0; return 0;
} }