Squashed 'third_party/boostorg/serialization/' content from commit 738695b

Change-Id: I48528198ad1f62b90288d249eb2243d4db02fd5d
git-subtree-dir: third_party/boostorg/serialization
git-subtree-split: 738695b70733f9d592a570fb17a505d6a029b48a
diff --git a/example/demo_portable_archive.cpp b/example/demo_portable_archive.cpp
new file mode 100644
index 0000000..6d9fb2b
--- /dev/null
+++ b/example/demo_portable_archive.cpp
@@ -0,0 +1,104 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//
+// demo_portable_archive.cpp
+//
+// (C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// should pass compilation and execution
+
+// note:: this example can only be built with the static library
+// (at least with MSVC - due to conflicts related to import of library
+// code and instantiation of templates.
+#include <sstream>
+
+#include "portable_binary_oarchive.hpp"
+#include "portable_binary_iarchive.hpp"
+
+#include <cstdlib>
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::rand; }
+#endif
+
+class A
+{
+    friend class boost::serialization::access;
+    char c;
+    A *pa;
+    int i;
+    int i2; // special tricky case to check sign extension
+    unsigned int ui;
+    long l;
+    unsigned long ul;
+    template<class Archive>
+    void serialize(Archive & ar, const unsigned int /* version */){
+        ar & c & i & i2 & ui & l & ul ;
+    }
+public:
+    bool operator==(const A & rhs) const {
+        return
+            c == rhs.c
+            && i == rhs.i
+            && i2 == rhs.i2
+            && ui == rhs.ui 
+            && l == rhs.l 
+            && ul == rhs.ul
+        ;
+    }
+    A() :
+        c(0xFF & std::rand()),
+        pa(0),
+        i(std::rand()),
+        i2(0x80),
+        ui(std::rand()),
+        l(std::rand() * std::rand()),
+        ul(std::rand())
+    {}
+};
+
+int main( int /* argc */, char* /* argv */[] )
+{
+    const A a;
+    A a1;
+
+    std::stringstream ss;
+    {   
+        portable_binary_oarchive pboa(ss);
+        pboa << a;
+    }
+    {
+        portable_binary_iarchive pbia(ss);
+        pbia >> a1;
+    }
+    if(! (a == a1))
+        return 1;
+
+    ss.clear();
+    {   
+        portable_binary_oarchive pboa(ss, endian_big);
+        pboa << a;
+    }
+    {
+        portable_binary_iarchive pbia(ss, endian_big);
+        pbia >> a1;
+    }
+    if(! (a == a1))
+        return 1;
+
+    ss.clear();
+    {   
+        portable_binary_oarchive pboa(ss, endian_big);
+        pboa << a;
+    }
+    {
+        portable_binary_iarchive pbia(ss, endian_big);
+        pbia >> a1;
+    }
+
+    return !(a == a1);
+}
+
+