• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_UNION_ACCESSOR_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_UNION_ACCESSOR_H_
7 
8 namespace mojo {
9 namespace internal {
10 
11 // When serializing and deserializing Unions, it is necessary to access
12 // the private fields and methods of the Union. This allows us to do that
13 // without leaking those same fields and methods in the Union interface.
14 // All Union wrappers are friends of this class allowing such access.
15 template <typename U>
16 class UnionAccessor {
17  public:
UnionAccessor(U * u)18   explicit UnionAccessor(U* u) : u_(u) {}
19 
data()20   typename U::Union_* data() { return &(u_->data_); }
21 
tag()22   typename U::Tag* tag() { return &(u_->tag_); }
23 
SwitchActive(typename U::Tag new_tag)24   void SwitchActive(typename U::Tag new_tag) { u_->SwitchActive(new_tag); }
25 
26  private:
27   U* u_;
28 };
29 
30 }  // namespace internal
31 }  // namespace mojo
32 
33 #endif  // MOJO_PUBLIC_CPP_BINDINGS_LIB_UNION_ACCESSOR_H_
34