Home | History | Annotate | Download | only in lib
      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:
     18   explicit UnionAccessor(U* u) : u_(u) {}
     19 
     20   typename U::Union_* data() { return &(u_->data_); }
     21 
     22   typename U::Tag* tag() { return &(u_->tag_); }
     23 
     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