1#ifndef ANDROID_PDX_RPC_POINTER_WRAPPER_H_
2#define ANDROID_PDX_RPC_POINTER_WRAPPER_H_
3
4namespace android {
5namespace pdx {
6namespace rpc {
7
8// Wrapper class for pointers to any serializable type. This class is used by
9// serialization/deserialization to handle pointers to objects that are to be
10// serialized or deserialized.
11template <typename T>
12class PointerWrapper {
13 public:
14  using BaseType = T;
15
16  PointerWrapper(T* pointer) : pointer_(pointer) {}
17  PointerWrapper(const PointerWrapper&) = default;
18  PointerWrapper(PointerWrapper&&) = default;
19  PointerWrapper& operator=(const PointerWrapper&) = default;
20  PointerWrapper& operator=(PointerWrapper&&) = default;
21
22  T& Dereference() { return *pointer_; }
23  const T& Dereference() const { return *pointer_; }
24
25 private:
26  T* pointer_;
27};
28
29template <typename T>
30PointerWrapper<T> WrapPointer(T* pointer) {
31  return PointerWrapper<T>(pointer);
32}
33
34}  // namespace rpc
35}  // namespace pdx
36}  // namespace android
37
38#endif  // ANDROID_PDX_RPC_POINTER_WRAPPER_H_
39