CCF
Loading...
Searching...
No Matches
pending_io.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
5#include <sys/socket.h>
6
16template <class T>
18{
19 using free_cb_t = void (*)(T*);
20 T* req;
21 size_t len;
22 sockaddr addr;
24 bool clear;
25
27 T* req_, size_t len_, sockaddr addr_, free_cb_t free_cb_ = nullptr) :
28 req(req_),
29 len(len_),
30 addr(addr_),
31 free_cb(free_cb_),
32 clear(false)
33 {
34 if (free_cb == nullptr)
35 {
36 // Assume we take ownership
37 auto orig = req;
38 req = new T[len];
39 memcpy(req, orig, len);
40 }
41 }
42
44 req(that.req),
45 len(that.len),
46 addr(that.addr),
47 free_cb(that.free_cb),
48 clear(that.clear)
49 {
50 that.req = nullptr;
51 }
52
54 {
55 req = std::move(that.req);
56 len = std::move(that.len);
57 addr = std::move(that.addr);
58 free_cb = std::move(that.free_cb);
59 clear = std::move(that.clear);
60 that.req = nullptr;
61 return *this;
62 }
63
65 {
66 if (free_cb)
67 {
68 free_cb(req);
69 }
70 else
71 {
72 delete[] req;
73 }
74 }
75
80 static void clear_empty(std::vector<PendingIO<T>>& list)
81 {
82 std::remove_if(
83 list.begin(), list.end(), [](PendingIO<T>& p) { return p.clear; });
84 }
85};
Pending writes on both host and enclave, with data, length and destination address.
Definition pending_io.h:18
PendingIO(PendingIO &&that)
Definition pending_io.h:43
size_t len
Definition pending_io.h:21
sockaddr addr
Definition pending_io.h:22
void(*)(T *) free_cb_t
Definition pending_io.h:19
~PendingIO()
Definition pending_io.h:64
static void clear_empty(std::vector< PendingIO< T > > &list)
Clears a list of PendingIO<T> of all elements that were marked to remove (clear flag == true).
Definition pending_io.h:80
PendingIO< T > & operator=(PendingIO &&that)
Definition pending_io.h:53
PendingIO(T *req_, size_t len_, sockaddr addr_, free_cb_t free_cb_=nullptr)
Definition pending_io.h:26
free_cb_t free_cb
Definition pending_io.h:23
bool clear
Definition pending_io.h:24
T * req
Definition pending_io.h:20