forked from hep-cce2/root_serialization
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSerializeStrategy.h
More file actions
52 lines (37 loc) · 1.34 KB
/
SerializeStrategy.h
File metadata and controls
52 lines (37 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#if !defined(SerializeStrategy_h)
#define SerializeStrategy_h
#include <vector>
#include <chrono>
#include "TClass.h"
#include "tbb/task_group.h"
#include "TaskHolder.h"
#include "ProxyVector.h"
namespace cce::tf {
class SerializeProxyBase {
public:
SerializeProxyBase() = default;
virtual ~SerializeProxyBase();
virtual void doWorkAsync(tbb::task_group& iGroup, void** iAddress, TaskHolder iCallback) = 0;
virtual std::vector<char> const& blob() const = 0;
virtual std::string_view name() const = 0;
virtual char const* className() const = 0;
virtual std::chrono::microseconds accumulatedTime() const = 0;
};
template<typename WRAPPER>
class SerializeProxy final : public SerializeProxyBase {
public:
SerializeProxy(std::string_view iName, TClass* tClass):
wrapper_{iName, tClass} {}
void doWorkAsync(tbb::task_group& iGroup, void** iAddress, TaskHolder iCallback) {
wrapper_.doWorkAsync(iGroup, iAddress, iCallback);
}
std::vector<char> const& blob() const { return wrapper_.blob(); }
std::string_view name() const { return wrapper_.name();}
char const* className() const { return wrapper_.className();}
std::chrono::microseconds accumulatedTime() const {return wrapper_.accumulatedTime();}
private:
WRAPPER wrapper_;
};
using SerializeStrategy = ProxyVector<SerializeProxyBase, std::string_view, TClass*>;
}
#endif