19 #ifndef INCLUDE_RCF_PROTOCOL_PROTOCOL_HPP
20 #define INCLUDE_RCF_PROTOCOL_PROTOCOL_HPP
22 #include <boost/function.hpp>
24 #include <RCF/Config.hpp>
25 #include <RCF/Exception.hpp>
26 #include <RCF/Tools.hpp>
28 #include <RCF/MemStream.hpp>
32 enum SerializationProtocol
50 class SerializationProtocolIn;
51 class SerializationProtocolOut;
53 extern const SerializationProtocol DefaultSerializationProtocol;
55 enum MarshalingProtocol
60 extern const MarshalingProtocol DefaultMarshalingProtocol;
67 static std::string getName()
77 std::size_t archiveSize,
80 SerializationProtocolIn & spIn)
82 RCF_UNUSED_VARIABLE(is);
83 RCF_UNUSED_VARIABLE(archiveSize);
84 RCF_UNUSED_VARIABLE(runtimeVersion);
85 RCF_UNUSED_VARIABLE(archiveVersion);
86 RCF_UNUSED_VARIABLE(spIn);
95 RCF_UNUSED_VARIABLE(t);
96 RCF_THROW(RCF::SerializationException(_RcfError_UnknownSerializationProtocol(N::value)))(N::value);
108 SerializationProtocolOut & spOut)
110 RCF_UNUSED_VARIABLE(os);
111 RCF_UNUSED_VARIABLE(runtimeVersion);
112 RCF_UNUSED_VARIABLE(archiveVersion);
113 RCF_UNUSED_VARIABLE(spOut);
120 Out &operator<<(
const T &t)
122 RCF_UNUSED_VARIABLE(t);
123 RCF_THROW(RCF::SerializationException(_RcfError_UnknownSerializationProtocol(N::value)))(N::value);
130 template<
typename IS,
typename OS>
131 class ProtocolImpl_SF
139 std::size_t archiveSize,
142 SerializationProtocolIn & spIn)
145 mAr.setIs(is, archiveSize, runtimeVersion, archiveVersion);
146 mAr.setRemoteCallContext(&spIn);
152 template<
typename T> In &operator>>(T &t)
175 SerializationProtocolOut & spOut)
178 mAr.setOs(os, runtimeVersion, archiveVersion);
179 mAr.setRemoteCallContext(&spOut);
180 mAr.suppressArchiveMetadata();
186 template<
typename T> Out &operator<<(
const T &t)
192 OS & getOStream() {
return mAr; }
200 template<
typename IS,
typename OS>
201 class ProtocolImpl_BSer
209 std::size_t archiveSize,
212 SerializationProtocolIn & spIn)
214 RCF_UNUSED_VARIABLE(archiveSize);
215 RCF_UNUSED_VARIABLE(runtimeVersion);
216 RCF_UNUSED_VARIABLE(archiveVersion);
217 RCF_UNUSED_VARIABLE(spIn);
219 mAr.reset(
new IS(is) );
220 invokeCustomizationCallback();
228 template<
typename T> In &operator>>(T &t)
234 typedef boost::function1<void, IS &> CustomizationCallback;
236 void setCustomizationCallback(CustomizationCallback customizationCallback)
238 mCustomizationCallback = customizationCallback;
239 invokeCustomizationCallback();
243 std::auto_ptr<IS> mAr;
245 CustomizationCallback mCustomizationCallback;
247 void invokeCustomizationCallback()
249 if (mCustomizationCallback)
251 mCustomizationCallback(*mAr);
264 SerializationProtocolOut & spOut)
266 RCF_UNUSED_VARIABLE(runtimeVersion);
267 RCF_UNUSED_VARIABLE(archiveVersion);
268 RCF_UNUSED_VARIABLE(spOut);
270 mAr.reset(
new OS(os) );
271 invokeCustomizationCallback();
279 template<
typename T> Out &operator<<(
const T &t)
285 typedef boost::function1<void, OS &> CustomizationCallback;
287 void setCustomizationCallback(CustomizationCallback customizationCallback)
289 mCustomizationCallback = customizationCallback;
290 invokeCustomizationCallback();
294 std::auto_ptr<OS> mAr;
296 CustomizationCallback mCustomizationCallback;
298 void invokeCustomizationCallback()
300 if (mCustomizationCallback)
302 mCustomizationCallback(*mAr);