OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef IPC_IPC_MESSAGE_UTILS_H_ | 5 #ifndef IPC_IPC_MESSAGE_UTILS_H_ |
6 #define IPC_IPC_MESSAGE_UTILS_H_ | 6 #define IPC_IPC_MESSAGE_UTILS_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <string> | 10 #include <string> |
11 #include <vector> | 11 #include <vector> |
12 #include <map> | 12 #include <map> |
13 #include <set> | 13 #include <set> |
14 | 14 |
15 #include "base/format_macros.h" | 15 #include "base/format_macros.h" |
16 #include "base/string16.h" | 16 #include "base/string16.h" |
17 #include "base/string_util.h" | 17 #include "base/string_util.h" |
18 #include "base/tuple.h" | 18 #include "base/tuple.h" |
| 19 #include "ipc/ipc_param_traits.h" |
19 #include "ipc/ipc_sync_message.h" | 20 #include "ipc/ipc_sync_message.h" |
20 | 21 |
21 #if defined(COMPILER_GCC) | 22 #if defined(COMPILER_GCC) |
22 // GCC "helpfully" tries to inline template methods in release mode. Except we | 23 // GCC "helpfully" tries to inline template methods in release mode. Except we |
23 // want the majority of the template junk being expanded once in the | 24 // want the majority of the template junk being expanded once in the |
24 // implementation file (and only provide the definitions in | 25 // implementation file (and only provide the definitions in |
25 // ipc_message_utils_impl.h in those files) and exported, instead of expanded | 26 // ipc_message_utils_impl.h in those files) and exported, instead of expanded |
26 // at every call site. Special note: GCC happily accepts the attribute before | 27 // at every call site. Special note: GCC happily accepts the attribute before |
27 // the method declaration, but only acts on it if it is after. | 28 // the method declaration, but only acts on it if it is after. |
28 #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40500 | 29 #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40500 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 } | 126 } |
126 } | 127 } |
127 private: | 128 private: |
128 const Message& msg_; | 129 const Message& msg_; |
129 mutable void* iter_; | 130 mutable void* iter_; |
130 }; | 131 }; |
131 | 132 |
132 //----------------------------------------------------------------------------- | 133 //----------------------------------------------------------------------------- |
133 // ParamTraits specializations, etc. | 134 // ParamTraits specializations, etc. |
134 | 135 |
135 template <class P> struct ParamTraits { | |
136 }; | |
137 | |
138 template <class P> | |
139 struct SimilarTypeTraits { | |
140 typedef P Type; | |
141 }; | |
142 | |
143 template <class P> | 136 template <class P> |
144 static inline void WriteParam(Message* m, const P& p) { | 137 static inline void WriteParam(Message* m, const P& p) { |
145 typedef typename SimilarTypeTraits<P>::Type Type; | 138 typedef typename SimilarTypeTraits<P>::Type Type; |
146 ParamTraits<Type>::Write(m, static_cast<const Type& >(p)); | 139 ParamTraits<Type>::Write(m, static_cast<const Type& >(p)); |
147 } | 140 } |
148 | 141 |
149 template <class P> | 142 template <class P> |
150 static inline bool WARN_UNUSED_RESULT ReadParam(const Message* m, void** iter, | 143 static inline bool WARN_UNUSED_RESULT ReadParam(const Message* m, void** iter, |
151 P* p) { | 144 P* p) { |
152 typedef typename SimilarTypeTraits<P>::Type Type; | 145 typedef typename SimilarTypeTraits<P>::Type Type; |
(...skipping 1077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1230 ReplyParam p(a, b, c, d, e); | 1223 ReplyParam p(a, b, c, d, e); |
1231 WriteParam(reply, p); | 1224 WriteParam(reply, p); |
1232 } | 1225 } |
1233 }; | 1226 }; |
1234 | 1227 |
1235 //----------------------------------------------------------------------------- | 1228 //----------------------------------------------------------------------------- |
1236 | 1229 |
1237 } // namespace IPC | 1230 } // namespace IPC |
1238 | 1231 |
1239 #endif // IPC_IPC_MESSAGE_UTILS_H_ | 1232 #endif // IPC_IPC_MESSAGE_UTILS_H_ |
OLD | NEW |