$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r51775 - in sandbox/endian: boost libs/integer/doc libs/integer/example libs/integer/test libs/integer/test/endian-in-sandbox libs/integer/test/endian-in-sandbox/binary_stream_test
From: bdawes_at_[hidden]
Date: 2009-03-14 09:54:37
Author: bemandawes
Date: 2009-03-14 09:54:35 EDT (Sat, 14 Mar 2009)
New Revision: 51775
URL: http://svn.boost.org/trac/boost/changeset/51775
Log:
Endian: add extractors and many more types to binary_stream.hpp, add binary_stream_test.
Added:
   sandbox/endian/libs/integer/test/binary_stream_test.cpp   (contents, props changed)
   sandbox/endian/libs/integer/test/endian-in-sandbox/binary_stream_test/
   sandbox/endian/libs/integer/test/endian-in-sandbox/binary_stream_test/binary_stream_test.vcproj   (contents, props changed)
Text files modified: 
   sandbox/endian/boost/binary_stream.hpp                                   |   154 ++++++++++++++++++--------------------- 
   sandbox/endian/libs/integer/doc/endian.html                              |    16 ++-                                     
   sandbox/endian/libs/integer/example/endian_hello_world.cpp               |    15 ++-                                     
   sandbox/endian/libs/integer/test/endian-in-sandbox/endian-in-sandbox.sln |     6 +                                       
   sandbox/endian/libs/integer/test/endian_test.cpp                         |     4                                         
   5 files changed, 101 insertions(+), 94 deletions(-)
Modified: sandbox/endian/boost/binary_stream.hpp
==============================================================================
--- sandbox/endian/boost/binary_stream.hpp	(original)
+++ sandbox/endian/boost/binary_stream.hpp	2009-03-14 09:54:35 EDT (Sat, 14 Mar 2009)
@@ -12,126 +12,118 @@
 
 #include <ostream>
 #include <istream>
+#include <string>
+#include <cstring>  // for strlen
+#include <cwchar>   // for wcslen
 
 namespace boost
 {
 
-  //  binary output for built-in types
+  //  binary input and output for built-in types
+
+  //  omission of bool and void* is deliberate; any semantics would be questionable
 
-  //  omission of bool is deliberate; semantics undecided
   inline std::ostream& operator<=(std::ostream& os, short v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, short& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, unsigned short v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, unsigned short& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, int v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, int& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, unsigned int v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, unsigned int& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, long v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, long& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, unsigned long v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, unsigned long& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, long long v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, long long& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, unsigned long long v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, unsigned long long& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, float v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, float& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, double v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, double& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, long double v)
     { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
-  inline std::ostream& operator<=(std::ostream& os, const void* p)
-    { return os.write( static_cast<const char*>(p), sizeof(p) ); }
+  inline std::istream& operator>=(std::istream& is, long double& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
   inline std::ostream& operator<=(std::ostream& os, char c)
     { return os.put( c ); }
+  inline std::istream& operator>=(std::istream& is, char& c)
+    { return is.get( c ); }
+
   inline std::ostream& operator<=(std::ostream& os, signed char c)
     { return os.put( c ); }
+  inline std::istream& operator>=(std::istream& is, signed char& c)
+    { return is.get( reinterpret_cast<char&>(c) ); }
+
   inline std::ostream& operator<=(std::ostream& os, unsigned char c)
     { return os.put( c ); }
+  inline std::istream& operator>=(std::istream& is, unsigned char& c)
+    { return is.get( reinterpret_cast<char&>(c) ); }
+
+  inline std::ostream& operator<=(std::ostream& os, wchar_t v)
+    { return os.write( reinterpret_cast<const char*>(&v), sizeof(v) ); }
+  inline std::istream& operator>=(std::istream& is, wchar_t& v)
+    { return is.read( reinterpret_cast<char*>(&v), sizeof(v) ); }
+
+  //  binary input and output for strings
+
   inline std::ostream& operator<=(std::ostream& os, const char* p)
     { return os.write( p, std::strlen(p)+1 ); }
+
   inline std::ostream& operator<=(std::ostream& os, const signed char* p)
-    { return os.write( static_cast<const char*>(p), std::strlen(p)+1 ); }
+    { return os.write( reinterpret_cast<const char*>(p), std::strlen(reinterpret_cast<const char*>(p))+1 ); }
+
   inline std::ostream& operator<=(std::ostream& os, const unsigned char* p)
-    { return os.write( static_cast<const char*>(p), std::strlen(p)+1 ); }
+    { return os.write( reinterpret_cast<const char*>(p), std::strlen(reinterpret_cast<const char*>(p))+1 ); }
+
+  inline std::ostream& operator<=(std::ostream& os, const wchar_t* p)
+    { return os.write( reinterpret_cast<const char*>(p), (std::wcslen(p)+1)*sizeof(wchar_t) ); }
 
+  //  Caution: note the asymmetry between output and input; a string with embedded
+  //  nulls will be output with the embedded nulls, but input will stop at the first null.
+  //  So it probably isn't a good idea to use these functions for strings with nulls.
+  inline std::ostream& operator<=(std::ostream& os, const std::string& s)
+    { return os.write( s.c_str(), s.size()+1 ); }
+  inline std::istream& operator>=(std::istream& is, std::string& s)
+    { return getline(is, s, '\0'); }
+
+  inline std::ostream& operator<=(std::ostream& os, const std::wstring& s)
+    { return os.write( reinterpret_cast<const char*>(s.c_str()), (s.size()+1)*sizeof(wchar_t) ); }
+  // TODO: provide input function
 
-//// 27.6.2.6 Formatted output:
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& (*pf)(basic_ostream<charT,traits>&));
-//basic_ostream<charT,traits>& operator<<(basic_ios<charT,traits>& (*pf)(basic_ios<charT,traits>&));
-//basic_ostream<charT,traits>& operator<<(ios_base& (*pf)(ios_base&));
-//basic_ostream<charT,traits>& operator<<(bool n);
-//basic_ostream<charT,traits>& operator<<(short n);
-//basic_ostream<charT,traits>& operator<<(unsigned short n);
-//basic_ostream<charT,traits>& operator<<(int n);
-//basic_ostream<charT,traits>& operator<<(unsigned int n);
-//basic_ostream<charT,traits>& operator<<(long n);
-//basic_ostream<charT,traits>& operator<<(unsigned long n);
-//basic_ostream<charT,traits>& operator<<(long long n);
-//basic_ostream<charT,traits>& operator<<(unsigned long long n);
-//basic_ostream<charT,traits>& operator<<(float f);
-//basic_ostream<charT,traits>& operator<<(double f);
-//basic_ostream<charT,traits>& operator<<(long double f);
-//basic_ostream<charT,traits>& operator<<(const void* p);
-//basic_ostream<charT,traits>& operator<<(basic_streambuf<char_type,traits>* sb);
-//
-//// 27.6.2.6.4 character inserters
-//template<class charT, class traits>
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT);
-//template<class charT, class traits>
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&&, charT);
-//template<class charT, class traits>
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char);
-//template<class charT, class traits>
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&&, char);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&&, char);
-//
-//// signed and unsigned
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed char);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&&, signed char);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned char);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&&, unsigned char);
-//
-//template<class charT, class traits>
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*);
-//template<class charT, class traits>
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&&, const charT*);
-//template<class charT, class traits>
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const char*);
-//template<class charT, class traits>
-//basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&&, const char*);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char*);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&&, const char*);
-//
-//// signed and unsigned
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed char*);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&&, const signed char*);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsigned char*);
-//template<class traits>
-//basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&&, const unsigned char*);
-//
-//// 21.3.8.9: inserters and extractors
-//template<class charT, class traits, class Allocator>
-//basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&& is, basic_string<charT,traits,Allocator>& str);
-//template<class charT, class traits, class Allocator>
-//basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>&& os, const basic_string<charT,traits,Allocator>& str);
-//template<class charT, class traits, class Allocator>
-//basic_istream<charT,traits>& getline(basic_istream<charT,traits>&& is, basic_string<charT,traits,Allocator>& str, charT delim);
-//template<class charT, class traits, class Allocator>
-//basic_istream<charT,traits>& getline(basic_istream<charT,traits>&& is, basic_string<charT,traits,Allocator>& str);
 
 }  // namespace boost
 
Modified: sandbox/endian/libs/integer/doc/endian.html
==============================================================================
--- sandbox/endian/libs/integer/doc/endian.html	(original)
+++ sandbox/endian/libs/integer/doc/endian.html	2009-03-14 09:54:35 EDT (Sat, 14 Mar 2009)
@@ -58,11 +58,13 @@
   </tr>
   <tr>
     <td width="100%" bgcolor="#E8F5FF">
-      <boost/integer/endian.hpp></td>
+      <boost/integer/endian.hpp><br>
+      <boost/integer/endian_io.hpp></td>
   </tr>
 </table>
 <h2><a name="Introduction">Introduction</a></h2>
-<p>The boost/integer/endian.hpp header provides 
+<p>Header
+      <boost/integer/endian.hpp> provides 
 integer-like byte-holder binary types with explicit control over 
 byte order, value type, size, and alignment. Typedefs provide easy-to-use names 
 for common configurations.</p>
@@ -79,8 +81,7 @@
 endian</b></i> and <i><b>little endian</b></i>.</p>
 <p>Boost endian integers provide the same full set of C++ assignment, 
 arithmetic, and relational operators as C++ standard integral types, with 
-the standard semantics, plus operators <code><<</code> and <code>>></code> for 
-stream insertion and extraction.</p>
+the standard semantics.</p>
 <p>Unary arithmetic operators are <code>+</code>, <code>-</code>, <code>~</code>,
 <code>!</code>, prefix and postfix <code>--</code> and <code>++</code>. Binary 
 arithmetic operators are <code>+</code>, <code>+=</code>, <code>-</code>, <code>
@@ -89,7 +90,10 @@
 <code>^</code>, <code>^=</code>, <code><<</code>, <code><<=</code>, <code>>></code>,
 <code>>>=</code>. Binary relational operators are <code>==</code>, <code>!=</code>,
 <code><</code>, <code><=</code>, <code>></code>, <code>>=</code>.</p>
-<p>Automatic conversion are provided to and from the underlying integer value type.</p>
+<p>Automatic conversion is provided to the underlying integer value type.</p>
+<p>Header <boost/integer/endian_io.hpp> 
+provides operators <code><<</code> and <code>>></code> for 
+stream insertion and extraction.</p>
 <h2><a name="Limitations">Limitations</a></h2>
 <p>Requires <code><climits></code> <code>CHAR_BIT == 8</code>. If <code>CHAR_BIT</code> 
 is some other value, compilation will result in an <code>#error</code>. This 
@@ -549,7 +553,7 @@
 Yuval Ronen.</p>
 <hr>
 <p>Last revised:
-<!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->11 March, 2009<!--webbot bot="Timestamp" endspan i-checksum="29023" --></p>
+<!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->12 March, 2009<!--webbot bot="Timestamp" endspan i-checksum="29025" --></p>
 <p>© Copyright Beman Dawes, 2006</p>
 <p>Distributed under the Boost Software License, Version 1.0. (See accompanying 
 file LICENSE_1_0.txt or copy at
Modified: sandbox/endian/libs/integer/example/endian_hello_world.cpp
==============================================================================
--- sandbox/endian/libs/integer/example/endian_hello_world.cpp	(original)
+++ sandbox/endian/libs/integer/example/endian_hello_world.cpp	2009-03-14 09:54:35 EDT (Sat, 14 Mar 2009)
@@ -7,6 +7,7 @@
 
 //  See library home page at http://www.boost.org/libs/endian
 
+#include <boost/integer/endian.hpp>
 #include <boost/integer/endian_io.hpp>
 #include <iostream>
 
@@ -15,10 +16,14 @@
 
 int main()
 {
-  long        value = 3224115L; // integer value of ASCII { '1', '2', '3' }
-  big24_t     big( value );
-  little24_t  little( value );
-
-  std::cout << "Hello, endian world "<< value << ' ' << big << ' ' << little << '\n';
+  int_least32_t value = 0x313233L;  // = 3224115 = ASCII { '1', '2', '3' }
+  big24_t       big( value );       
+  little24_t    little( value );
+
+  std::cout << "Hello, endian world!\n";
+  std::cout << " cout << value--: " << value  << " sizeof(value): " << sizeof(value)
+          << "\n cout << big----: " << big    << " sizeof(big): " << sizeof(big)
+          << "\n cout << little-: " << little << " sizeof(little): " << sizeof(little)
+          << '\n';
 }
 
Added: sandbox/endian/libs/integer/test/binary_stream_test.cpp
==============================================================================
--- (empty file)
+++ sandbox/endian/libs/integer/test/binary_stream_test.cpp	2009-03-14 09:54:35 EDT (Sat, 14 Mar 2009)
@@ -0,0 +1,122 @@
+//  binary_test.cpp  -------------------------------------------------------------------//
+
+//  Copyright Beman Dawes, 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/binary_stream.hpp>
+#include <boost/cstdint.hpp>
+#include <cstring>
+#include <iostream>
+#include <sstream>
+
+using namespace boost;
+using namespace std;
+
+namespace
+{
+  int errors = 0;
+
+  void verify( bool x, const char * file, int line )
+  {
+    if ( x ) return;
+    ++errors;
+    cout << file << "(" << line << ") : error: predicate is false\n" << endl;
+  }
+
+}
+
+#define BOOST_VERIFY(predicate) verify( predicate, __FILE__, __LINE__ )
+
+
+int main()
+{
+  std::stringstream ss( std::ios_base::in | std::ios_base::out | std::ios_base::binary );
+
+  short short_1(0x0102), short_2;
+  ss <= short_1;
+  ss >= short_2;
+  BOOST_VERIFY( short_1 == short_2 );
+
+  unsigned short ushort_1(0x0102), ushort_2;
+  ss <= ushort_1;
+  ss >= ushort_2;
+  BOOST_VERIFY( ushort_1 == ushort_2 );
+
+  int int_1(0x01020304), int_2;
+  ss <= int_1;
+  ss >= int_2;
+  BOOST_VERIFY( int_1 == int_2 );
+
+  unsigned int uint_1(0x01020304), uint_2;
+  ss <= uint_1;
+  ss >= uint_2;
+  BOOST_VERIFY( uint_1 == uint_2 );
+
+  long long_1(0x01020304L), long_2;
+  ss <= long_1;
+  ss >= long_2;
+  BOOST_VERIFY( long_1 == long_2 );
+
+  unsigned long ulong_1(0x01020304UL), ulong_2;
+  ss <= ulong_1;
+  ss >= ulong_2;
+  BOOST_VERIFY( ulong_1 == ulong_2 );
+
+  long long long_long_1(0x0102030405060708LL), long_long_2;
+  ss <= long_long_1;
+  ss >= long_long_2;
+  BOOST_VERIFY( long_long_1 == long_long_2 );
+
+  unsigned long long ulong_long_1(0x0102030405060708ULL), ulong_long_2;
+  ss <= ulong_long_1;
+  ss >= ulong_long_2;
+  BOOST_VERIFY( ulong_long_1 == ulong_long_2 );
+
+  float float_1(1.2F), float_2;
+  ss <= float_1;
+  ss >= float_2;
+  BOOST_VERIFY( float_1 == float_2 );
+
+  double double_1(1.2), double_2;
+  ss <= double_1;
+  ss >= double_2;
+  BOOST_VERIFY( double_1 == double_2 );
+
+  long double long_double_1(1.2), long_double_2;
+  ss <= long_double_1;
+  ss >= long_double_2;
+  BOOST_VERIFY( long_double_1 == long_double_2 );
+
+  char char_1(0x01), char_2;
+  ss <= char_1;
+  ss >= char_2;
+  BOOST_VERIFY( char_1 == char_2 );
+
+  signed char schar_1(0x01), schar_2;
+  ss <= schar_1;
+  ss >= schar_2;
+  BOOST_VERIFY( schar_1 == schar_2 );
+
+  unsigned char uchar_1(0x01), uchar_2;
+  ss <= uchar_1;
+  ss >= uchar_2;
+  BOOST_VERIFY( uchar_1 == uchar_2 );
+
+  wchar_t wchar_t_1(L'1'), wchar_t_2;
+  ss <= wchar_t_1;
+  ss >= wchar_t_2;
+  BOOST_VERIFY( wchar_t_1 == wchar_t_2 );
+
+  string string_1("foobar"), string_2;
+  ss <= string_1.c_str();
+  ss >= string_2;
+  BOOST_VERIFY( string_1 == string_2 );
+  ss <= string_1;
+  ss >= string_2;
+  BOOST_VERIFY( string_1 == string_2 );
+
+  cout << errors << " error(s) detected\n";
+  return errors;
+}
Added: sandbox/endian/libs/integer/test/endian-in-sandbox/binary_stream_test/binary_stream_test.vcproj
==============================================================================
--- (empty file)
+++ sandbox/endian/libs/integer/test/endian-in-sandbox/binary_stream_test/binary_stream_test.vcproj	2009-03-14 09:54:35 EDT (Sat, 14 Mar 2009)
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="binary_stream_test"
+	ProjectGUID="{1382D085-FF3F-4573-8709-E10D3D74D620}"
+	RootNamespace="binary_stream_test"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			InheritedPropertySheets="..\common.vsprops"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			InheritedPropertySheets="..\common.vsprops"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\binary_stream_test.cpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Modified: sandbox/endian/libs/integer/test/endian-in-sandbox/endian-in-sandbox.sln
==============================================================================
--- sandbox/endian/libs/integer/test/endian-in-sandbox/endian-in-sandbox.sln	(original)
+++ sandbox/endian/libs/integer/test/endian-in-sandbox/endian-in-sandbox.sln	2009-03-14 09:54:35 EDT (Sat, 14 Mar 2009)
@@ -13,6 +13,8 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "endian_hello_world", "endian_hello_world\endian_hello_world.vcproj", "{1AAEBB4E-501E-417E-9531-04469AF5DD8B}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "binary_stream_test", "binary_stream_test\binary_stream_test.vcproj", "{1382D085-FF3F-4573-8709-E10D3D74D620}"
+EndProject
 Global
         GlobalSection(SolutionConfigurationPlatforms) = preSolution
                 Debug|Win32 = Debug|Win32
@@ -43,6 +45,10 @@
                 {1AAEBB4E-501E-417E-9531-04469AF5DD8B}.Debug|Win32.Build.0 = Debug|Win32
                 {1AAEBB4E-501E-417E-9531-04469AF5DD8B}.Release|Win32.ActiveCfg = Release|Win32
                 {1AAEBB4E-501E-417E-9531-04469AF5DD8B}.Release|Win32.Build.0 = Release|Win32
+		{1382D085-FF3F-4573-8709-E10D3D74D620}.Debug|Win32.ActiveCfg = Debug|Win32
+		{1382D085-FF3F-4573-8709-E10D3D74D620}.Debug|Win32.Build.0 = Debug|Win32
+		{1382D085-FF3F-4573-8709-E10D3D74D620}.Release|Win32.ActiveCfg = Release|Win32
+		{1382D085-FF3F-4573-8709-E10D3D74D620}.Release|Win32.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(SolutionProperties) = preSolution
                 HideSolutionNode = FALSE
Modified: sandbox/endian/libs/integer/test/endian_test.cpp
==============================================================================
--- sandbox/endian/libs/integer/test/endian_test.cpp	(original)
+++ sandbox/endian/libs/integer/test/endian_test.cpp	2009-03-14 09:54:35 EDT (Sat, 14 Mar 2009)
@@ -2,8 +2,8 @@
 
 //  Copyright Beman Dawes, 1999-2008
 
-//  Distributed under 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)
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
 
 //  See library home page at http://www.boost.org/libs/endian