framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
repeated.hpp
Go to the documentation of this file.
1 // Copyright (C) 2013 iwg molw5
2 // For conditions of distribution and use, see copyright notice in COPYING
3 
13 #pragma once
14 
17 
18 namespace framework
19 {
20  namespace protocol_buffers
21  {
29  template <typename T>
31  {
32  private:
33  using container_type = std::vector <typename T::value_type>;
34 
35  public:
36  using value_type = typename T::value_type;
37  using const_iterator = typename container_type::const_iterator;
38 
39  public:
40  default_repeated_value () = default;
41 
42  default_repeated_value (value_type value)
43  : p_tValue {std::move(value)}
44  {
45  }
46 
47  default_repeated_value (std::tuple <>)
49  {
50  }
51 
52  template <typename... Args>
53  default_repeated_value (std::tuple <Args...>&& args)
54  : default_repeated_value (
55  std::forward <std::tuple <Args...>> (args),
56  static_cast <make_indices <sizeof... (Args)>*> (nullptr))
57  {
58  }
59 
60  private:
61  template <typename... Args, typename... Indices>
62  default_repeated_value (std::tuple <Args...> args, pack_container <Indices...>*)
63  : p_tValue{std::forward <Args> (std::get <Indices::value> (args))...}
64  {
65  }
66 
67  public:
69  container_type const& get () const
70  {
71  return p_tValue;
72  }
73 
75  void set (container_type value)
76  {
77  p_tValue = std::move(value);
78  }
79 
81  container_type& mutate ()
82  {
83  return p_tValue;
84  }
85 
86  protected:
87  ~default_repeated_value () = default;
88 
89  protected:
90  container_type p_tValue {};
91  };
92 
96  template <
97  typename Name,
98  uint32_t Number,
99  typename Specification,
100  template <typename> class Implementation = default_repeated_value>
101  struct repeated :
102  public field_base <
103  std::integral_constant <e_field_type, e_field_type::repeated>,
104  std::integral_constant <uint32_t, Number>>,
105  public serializable::value_type <Name, Specification,
106  protocol_buffer_implementation_wrapper <
107  Name,
108  std::integral_constant <uint32_t, Number>,
109  Specification,
110  Implementation
111  >::template type,
112  false>
113  {
114  };
115  }
116 }
117 
118 #include <framework/protocol_buffers/repeated.inl>