Imported Upstream version 1.72.0
[platform/upstream/boost.git] / boost / endian / buffers.hpp
index 46f6eb7..856dbca 100644 (file)
@@ -100,6 +100,12 @@ namespace endian
   typedef endian_buffer<order::little, uint32_t, 32, align::yes> little_uint32_buf_at;
   typedef endian_buffer<order::little, uint64_t, 64, align::yes> little_uint64_buf_at;
 
+  // aligned floating point buffers
+  typedef endian_buffer<order::big, float, 32, align::yes>       big_float32_buf_at;
+  typedef endian_buffer<order::big, double, 64, align::yes>      big_float64_buf_at;
+  typedef endian_buffer<order::little, float, 32, align::yes>    little_float32_buf_at;
+  typedef endian_buffer<order::little, double, 64, align::yes>   little_float64_buf_at;
+
   // aligned native endian typedefs are not provided because
   // <cstdint> types are superior for this use case
 
@@ -185,6 +191,14 @@ namespace endian
   typedef little_uint64_buf_t  native_uint64_buf_t;
 # endif
 
+  // unaligned floating point buffers
+  typedef endian_buffer<order::big, float, 32, align::no>       big_float32_buf_t;
+  typedef endian_buffer<order::big, double, 64, align::no>      big_float64_buf_t;
+  typedef endian_buffer<order::little, float, 32, align::no>    little_float32_buf_t;
+  typedef endian_buffer<order::little, double, 64, align::no>   little_float64_buf_t;
+  typedef endian_buffer<order::native, float, 32, align::no>    native_float32_buf_t;
+  typedef endian_buffer<order::native, double, 64, align::no>   native_float64_buf_t;
+
   // Stream inserter
   template <class charT, class traits, BOOST_SCOPED_ENUM(order) Order, class T,
     std::size_t n_bits, BOOST_SCOPED_ENUM(align) A>
@@ -259,9 +273,14 @@ public:
         return boost::endian::endian_load<T, n_bits / 8, Order>( value_ );
     }
 
-    char const * data() const BOOST_NOEXCEPT
+    unsigned char const * data() const BOOST_NOEXCEPT
+    {
+        return value_;
+    }
+
+    unsigned char * data() BOOST_NOEXCEPT
     {
-        return reinterpret_cast< char const* >( value_ );
+        return value_;
     }
 };
 
@@ -309,9 +328,14 @@ public:
         return boost::endian::endian_load<T, n_bits / 8, Order>( value_ );
     }
 
-    char const * data() const BOOST_NOEXCEPT
+    unsigned char const * data() const BOOST_NOEXCEPT
     {
-        return reinterpret_cast< char const* >( value_ );
+        return value_;
+    }
+
+    unsigned char * data() BOOST_NOEXCEPT
+    {
+        return value_;
     }
 };
 
@@ -352,9 +376,14 @@ public:
         return value_;
     }
 
-    char const * data() const BOOST_NOEXCEPT
+    unsigned char const * data() const BOOST_NOEXCEPT
+    {
+        return reinterpret_cast< unsigned char const* >( &value_ );
+    }
+
+    unsigned char * data() BOOST_NOEXCEPT
     {
-        return reinterpret_cast< char const* >( &value_ );
+        return reinterpret_cast< unsigned char* >( &value_ );
     }
 };